如何在 C# 项目的 prebuild 和 postbuild 事件中获取最新的 windows sdk 版本路径?

How to get latest windows sdk version path in prebuild and postbuild event of a C# project?

在我的 Visual Studio 2010 项目中,我们 运行 C# 项目中的预构建和后构建事件如下:

prebuildevent: "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\rc.exe" "$(ProjectDir)$(ProjectName).rc"

postbuildevent: "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\mt.exe" -manifest "$(ProjectDir)$(TargetName).exe.manifest" -outputresource:"$(TargetDir)$(TargetFileName)";#1

其中,rc.exe 和 mt.exe 的路径针对 Visual Studio 2010 进行了硬编码。现在我们正在从 Visual Studio 2010 迁移到 Visual Studio 2019.

在 Visual Studio 2019 中,rc.exe 和 mt.exe 存在于此路径中:“C:\Program Files (x86)\Windows Kits\bin .0.17763.0\x86\rc.exe" 和 "C:\Program Files (x86)\Windows Kits\bin.0.17763.0\x86\mt.exe".

但我不能使用上面提到的硬编码路径,因为 Windows SDK 版本在每次 SDK 版本更新时都会更改。

我发现我们可以使用 WindowsSdkverbinpath 变量来获取最新的 windows sdk 版本路径,但在我的例子中这个 我能够像 $(WindowsSdkverbinpath) 一样为 C++ 项目使用它 并且它正在解析路径和 C# 项目我不能像在 C++ 项目中那样使用它。

搜索WindowsSdkverbinpath 的目的是在构建前和构建后事件中使用它来访问mt.exe 和rc.exe

任何人都可以帮助我获得 WindowsSdkverbinPath 以便在 c# 项目的预构建和后构建事件中使用它,提前致谢。

恐怕目前在C#项目中还得不到你想要的。

$(WindowsSdkverbinpath)$(WindowsSdkDir) 目前在 C++ 个项目上工作,而不是 C# 个项目。

所以 你无法通过 MSBuildC# 个项目。

如果 你想在 C# 项目上获得最新版本的 Win10 工具包,你必须使用硬编码方法。

因为 打开每个 C# 项目然后更改 rc.exemt.exe 的路径可能不方便。

所以我建议你可以使用这个:

建议

在您的项目文件夹中创建一个名为 Directory.Build.props 的文件

然后 在该文件中添加这些内容:

<Project>
<PropertyGroup>

 <PreBuildEvent>C:\Program Files (x86)\Windows Kits\bin.0.17763.0\x86\rc.exe "$(ProjectDir)$(ProjectName).rc"</PreBuildEvent>
 <PostBuildEvent>"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\mt.exe" -manifest "$(ProjectDir)$(TargetName).exe.manifest" -outputresource:"$(TargetDir)$(TargetFileName)";#1</PostBuildEvent>

</PropertyGroup>
</Project>

该文件将在构建过程中集成到您的项目中。而且您只需修改文件并更改一次 sdk 版本,然后保存该文件。将该文件复制到每个 C# 项目文件夹中。

可能更方便