Visual studio 运行vcvarsall,但cl和其他仍然不可用

Visual studio 运行vcvarsall,但cl和其他仍然不可用,visual-studio,powershell,msbuild,nmake,cl,Visual Studio,Powershell,Msbuild,Nmake,Cl,如标题所示,执行后使用Powershell PS C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build>\vcvarsall.bat amd64 然后像cl、nmake或msbuild这样的程序应该在路径上可用,但它们不可用 PS C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build>c

如标题所示,执行后使用Powershell

PS C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build>\vcvarsall.bat amd64

然后像
cl
nmake
msbuild
这样的程序应该在路径上可用,但它们不可用

PS C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build>cl cl:术语“cl”不能识别为cmdlet、函数、脚本文件或可操作程序的名称。检查 名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。 第1行字符:1

  • 氯离子
  • ~~
    • CategoryInfo:ObjectNotFound:(cl:String)[],CommandNotFoundException
    • FullyQualifiedErrorId:CommandNotFoundException
规格:

  • VS 2019社区版的“使用C++进行桌面开发”工作负载:
    • MSVC V142VS 2019 C++ X64/x86构建工具(V1428)
    • Windows 10 SDK(10.0.18362.0)
    • 即时调试器
    • C++评测工具
    • C++CMake Windows工具
    • 用于最新v142构建工具(x86和x64)的C++ATL
    • 升压测试适配器。测试
    • Google测试的测试适配器
    • 现场分享
    • C++地址消毒剂(实验)
  • Win10 Pro N x64、20H2、19042.746

我缺少什么?

Powershell在子
cmd
进程中执行批处理文件。VS环境在
cmd
进程中设置,然后在进程结束且控件返回Powershell时丢弃

简单的解决方案是颠倒顺序,并在启动Powershell会话之前设置VS环境,以便PS继承它。假设使用正确的
VS160COMNTOOLS
环境变量集进行常规VS安装,则可以通过在命令提示符下、通过Start/Run或从PS本身运行以下命令来完成

cmd /c ""%VS160COMNTOOLS%\..\..\VC\Auxiliary\Build\vcVarsAll.bat" amd64 && start powershell"

另请参阅和,以了解更多讨论和可能的替代方案-通常用于将环境变量从批处理文件返回到PS,特别是VS环境。

这解释了很多事情,谢谢dxiv!