从cmder打开.sln文件?

时间:2017-09-21 03:15:44

标签: cmder

是否可以启动devenv.exe并从cmder打开.sln文件?从命令行克隆git repo之后,我想在Visual Studio中快速打开解决方案,而不必离开cmder。

2 个答案:

答案 0 :(得分:4)

Danny是对的,你只需输入xxx.sln即可。

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

以下是一些示例命令:

  1. vs - 将打开它找到的第一个sln文件,如果它找不到它只会在没有解决方案的情况下打开Visual Studio。我默认使用Visual Studio 2017打开。只需更改default函数中的Get-VisualStudioCommand大小写,如果您更默认为其他版本。
  2. vs 15 - 我的计算机上有很多版本的Visual Studio,因此这将与vs类似地打开,但将在Visual Studio 2015中打开。
  3. vs 13 'helloWorld.sln' - 这会打开一个特定的sln文件,即helloWorld.sln。我最近工作的一个项目在同一目录中有多个解决方案。
  4. vs -WhatIf -Verbose - 这将显示脚本运行时将执行的操作,并将打印出Write-Verbose消息。方便调试。我在下面的图片中展示了这个例子。
  5. 对于此解决方案,我假设您正在使用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,I'我们刚刚创建了这些快捷方式。

    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
    

    如果您有任何疑问,请与我们联系。我希望它有所帮助。

答案 1 :(得分: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并高兴!