首页 > 解决方案 > 如何在 C# 项目的 prebuild 和 postbuild 事件中获取最新的 windows sdk 版本路径?

问题描述

在我的 Visual Studio 2010 项目中,我们在 C# 项目中运行 prebuild 和 postbuildevent,如下所示:

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 )$(目标文件名)";#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\10\bin\10.0.17763.0\x86\rc.exe”和“C:\程序文件 (x86)\Windows 工具包\10\bin\10.0.17763.0\x86\mt.exe”。

但我不能使用上面提到的硬编码路径,因为 Windows SDK 版本会随着每个 SDK 版本更新而改变。

我发现我们可以使用WindowsSdkverbinpath变量来获取最新的 windows sdk 版本路径,但在我的情况下,我可以像 $(WindowsSdkverbinpath) 一样将它用于 c++ 项目,它正在解析路径和我无法的 c# 项目像在 c++ 项目中一样使用它。

搜索 WindowsSdkverbinpath 的目的是在 prebuild 和 postbuild 事件中使用它来访问 mt.exe 和 rc.exe

请任何人都可以帮助我让 WindowsSdkverbinPath 在 ac# 项目的 prebuild 和 postbuildevents 中使用它,在此先感谢。

标签: c#visual-studiomsbuildvisual-studio-2019mt

解决方案


恐怕到目前为止您无法在 C# 项目中得到您想要的东西。

$(WindowsSdkverbinpath)并且$(WindowsSdkDir)从事C++项目而不是C#迄今为止的项目。

所以你无法通过MSBuild在项目上获得最新版本的Win10 工具包。C#

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

由于打开每个 C# 项目,然后更改路径,rc.exe可能mt.exe会很不方便。

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

建议

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

在此处输入图像描述

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

<Project>
<PropertyGroup>

 <PreBuildEvent>C:\Program Files (x86)\Windows Kits\10\bin\10.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# 项目文件夹中。

可能会更方便。


推荐阅读