从cmder中打开.sln文件?

5

是否可以在Cmder中启动devenv.exe并打开.sln文件?当我通过命令行克隆Git存储库后,我希望能够快速在Visual Studio中打开解决方案,而不必离开Cmder。


1
在Windows的cmd.exe或powershell中,您可以在命令行中键入xxx.sln并打开它(如果您的Visual Studio已正确安装,这意味着.sln文件类型已正确关联到VS,您可以在win10的设置中检查APPS->默认应用程序)。由于cmder包装了cmd/ps,因此它应该以相同的方式工作。 - Cheng Chen
你是完全正确的。谢谢,Danny! - spacemonkey
安装 WhatsNew。在 cmdler 中导航到存储库。键入 sln。完成。 - Nick Spreitzer
2个回答

8

Danny是正确的,你只需输入xxx.sln

我有点懒,开发了下面的脚本,可以输入vs,它会在当前目录中查找并打开第一个sln文件。

以下是一些示例命令:

  1. vs - 如果找到第一个sln文件,它会打开它,如果没有找到,它将只是打开Visual Studio而不带解决方案。我默认使用Visual Studio 2017进行打开。如果您想要将默认版本更改为其他版本,请在Get-VisualStudioCommand函数中更改default case。
  2. vs 15 - 我的计算机上有很多版本的Visual Studio,因此这将类似于vs,但将使用Visual Studio 2015进行打开。
  3. vs 13 'helloWorld.sln' - 这将打开特定的sln文件,即helloWorld.sln。我最近参与的一个项目在同一目录中有多个解决方案。
  4. vs -WhatIf -Verbose - 这将显示脚本运行时的操作并打印Write-Verbose消息。用于调试。我在下面的图像中展示了一个例子。
对于这个解决方案,我假设您正在使用PowerShell控制台。 如果是这样,您可以定义一个.ps1文件,在控制台打开之前通过-File选项运行它。 这就像为每个控制台窗口定义具有不同命令的不同PowerShell配置文件(非常强大)。
请参见下面的图像,其中我展示了如何进入设置并修改PowerShell: PowerShell任务以执行PowerShell -NoExit -NoLogo -File C:\ src \ ps \ Cmder \ general_setup.ps1 -new_console:d:“C:\ src” 以下是该图像(请注意,尽管我使用了ls的别名,使其在PowerShell中输出像Linux ls命令一样...但这是一个PowerShell控制台):cmder setup 如果你将以下脚本添加到C:\src\ps\Cmder\general_setup.ps1文件中(或者任何你想放置的地方)...然后你可以输入vs并执行。请注意,在Get-VisualStudioCommand函数中,我已经放置了所有的文件路径......虽然代码看起来不是很优雅,但如果你的devenv.exe文件路径与我的不同,只需在那里更改即可。
注意,你也可以通过-ArgumentList或标志添加一个传递给/SafeMode命令的选项,以便在需要时以安全模式打开Visual Studio,我只是创建了这些快捷方式作为一种快速而简单的方法。
function Get-VisualStudioCommand
{
    [CmdletBinding()]
    param ( [AllowNull()][String] $vsVersion )
    $vs10 = """${env:ProgramFiles(x86)}\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe"""
    $vs13 = """${env:ProgramFiles(x86)}\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe"""
    $vs15 = """${env:ProgramFiles(x86)}\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"""
    $vs17 = """${env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.exe"""

    switch ($vsVersion) 
    { 
        '10' {$vs10}
        '13' {$vs13}
        '15' {$vs15} 
        '17' {$vs17} 
        default {$vs17} 
    }
}

function Get-SolutionName
{
    [CmdletBinding()]
    param ( [AllowNull()][String] $Name )

    if (!$Name)
    {
        $Name = Get-ChildItem -Filter *.sln
    }

    if ($Name)
    {
        $Name = ('"{0}"' -f $Name)
    }

    return $Name
}

function Start-VisualStudioProcess
{
    [CmdletBinding(SupportsShouldProcess=$true)]
    param([String]$Version, [String]$Sln)

    $VsCommand = Get-VisualStudioCommand -vsVersion $Version
    $Sln = Get-SolutionName -Name $Sln

    Write-Verbose -Message ('Starting: command={0} solutionName={1}' -f $VsCommand, $Sln)

    if ($PSCmdlet.ShouldProcess($VsCommand, 'Start-Process'))
    {
        if ($Sln)
        {
            Start-Process -FilePath $vsCommand -ArgumentList $sln
        }
        else
        {
            Start-Process -FilePath $vsCommand 
        }

    }
}
Set-Alias -Name vs -Value Start-VisualStudioProcess

如果您有任何问题,请让我知道。希望这可以帮助到您。


0
在你的命令提示符(cmd, cmder等)中运行此命令。
reg add "HKCU\Software\Microsoft\Command Processor" /v Autorun /d "doskey vs=for /f \"delims=\" %a IN ('dir /b *.sln') do start %a" /f

写下 "vs",打开解决方案文件夹中的第一个 *.sln 文件,就可以愉快地开始编程了!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接