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提供Invoke-Environment.ps1听起来可能是解决方案,但Invoke-Environment "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
什么都不做,没有任何效果。
我是以错误的方式使用Invoke-Environment,还是我应该做的其他事情?
答案 0 :(得分:1)
我制作了一个简单的 cmdlet 来将当前的 PowerShell 实例设置为“开发人员环境”,我只是将它留在我的 $profile
上,它使用了来自 ms 的 2 个模块,一个是找到安装 Visual Studio 的位置,另一个随 vs 2019 及更高版本一起提供,它用于为开始菜单上的“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
}
i leave my profile on gh so, there this function wil always be up-to-date