如何从PowerShell运行微软命令行编译器

本文关键字:微软 命令行 编译器 运行 PowerShell | 更新日期: 2023-09-27 18:14:10

Windows 7, PowerShell 2, Visual Studio 2015,我试图从PowerShell运行命令行c#编译器(不是Visual Studio内嵌入的PowerShell,而是一个常规的,全面的命令窗口)。

在正常情况下,在使用命令行编译器之前,您需要运行C:'Program Files (x86)'Microsoft Visual Studio 14.0'VC'vcvarsall.bat,但这在这里不起作用,因为环境变量将在cmd.exe中设置,然后在控制返回到PowerShell时丢弃。

https://github.com/nightroman/PowerShelf提供调用环境。ps1,这听起来可能是解决方案,但Invoke-Environment "C:'Program Files (x86)'Microsoft Visual Studio 14.0'VC'vcvarsall.bat"什么也不做,没有任何效果。

我是否以错误的方式使用了Invoke-Environment,或者我应该做其他事情?

如何从PowerShell运行微软命令行编译器

我做了一个简单的命令来设置当前的PowerShell实例为"开发人员环境";我只是离开我的$profile,它使用ms的2个模块,一个是找到安装visual studio的地方,另一个是vs2019及以上,它用于为"vs powershell"供电。开始菜单上的东西。这是:

function Enter-VsDevEnv {
    [CmdletBinding()]
    param(
        [Parameter()]
        [switch]$Prerelease,
        [Parameter()]
        [string]$architecture = "x64"
    )
    $ErrorActionPreference = 'Stop'
    if ($null -eq (Get-InstalledModule -name 'VSSetup' -ErrorAction SilentlyContinue)) {
        Install-Module -Name 'VSSetup' -Scope CurrentUser -SkipPublisherCheck -Force
    }
    Import-Module -Name 'VSSetup'
    Write-Verbose 'Searching for VC++ instances'
    $vsinfo = `
        Get-VSSetupInstance  -All -Prerelease:$Prerelease `
    | Select-VSSetupInstance `
        -Latest -Product * `
        -Require 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64'
    $vspath = $vsinfo.InstallationPath
    switch ($env:PROCESSOR_ARCHITECTURE) {
        "amd64" { $hostarch = "x64" }
        "x86" { $hostarch = "x86" }
        "arm64" { $hostarch = "arm64" }
        default { throw "Unknown architecture: $switch" }
    }
    $devShellModule = "$vspath'Common7'Tools'Microsoft.VisualStudio.DevShell.dll"
    Import-Module -Global -Name $devShellModule
    Write-Verbose 'Setting up environment variables'
    Enter-VsDevShell -VsInstanceId $vsinfo.InstanceId  -SkipAutomaticLocation `
        -devCmdArguments "-arch=$architecture -host_arch=$hostarch"
    Set-Item -Force -path "Env:'Platform" -Value $architecture
    remove-Module Microsoft.VisualStudio.DevShell, VSSetup
}

我把我的个人资料留在gh上,所以这个函数将永远是最新的