有没有一种方法可以在 Visual Studio 2019 中从 Microsoft C++ 工具集中引用 link.exe 而无需对路径进行硬编码?

Is there a way to reference link.exe from Microsoft C++ toolset in Visual Studio 2019 without hardcode the path?

我在 Visual Studio 2019 年的一个 c# 项目的预构建事件中使用 Microsoft C++ 工具集的 link.exe。

问题是每次Visual Studio 2019更新时,都会因为MSVC文件夹的版本而改变路径。

例如: 在 VS 16.2.0 中,link.exe 的路径从 ..\14.21.27702... 更改为 ..\14.22.27905..

我搜索环境变量但找不到。

我的完整命令行: C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Tools\MSVC.21.27702\bin\Hostx86\x86\link.exe" /MACHINE:x86 /VERBOSE /NOENTRY /DLL /OUT:"$(ProjectDir)$(OutDir)$(TargetName).ribbon.dll" "$(ProjectDir)RibbonMarkup.res")

我希望能够参考 link.exe 而没有这个容易出错的路径。

有没有办法在我的预构建事件中不对它进行硬编码的情况下获取到 link.exe 的路径?

阅读更多有关 MSVC 中的环境变量的信息后 here, and here

我在 "Tools-> Command Line-> Developer Command Prompt" 中 运行 命令 "SET" 并找到了 "VCToolsInstallDir" 和我想要的路径。

但是在预编译事件中,这个环境变量没有设置值。

所以我执行了: 调用“$(DevEnvDir)....\VC\Auxiliary\Build\vcvars32.bat” 设置 "VCToolsInstallDir" 值。

最后,我的预构建事件是这样的:

call "$(DevEnvDir)..\..\VC\Auxiliary\Build\vcvars32.bat" "%VCToolsInstallDir%\bin\Hostx86\x86\link.exe" /MACHINE:x86 /VERBOSE /NOENTRY /DLL /OUT:"$(ProjectDir)$(OutDir)$(TargetName).ribbon.dll" "$(ProjectDir)RibbonMarkup.res"