如何在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”-清单“ $(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 \ 10 \ bin \ 10.0.17763.0 \ x86 \ rc.exe”和“ C:\ Program Files(x86)\ Windows Kits \ 10 \ bin \ 10.0.17763.0 \ x86 \ mt.exe”。

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

我发现我们可以使用 WindowsSdkverbinpath 变量来获取最新的Windows sdk版本路径,但是对于我来说,这个我可以像$(WindowsSdkverbinpath)一样将其用于c ++项目,它正在解决路径和C#项目,我无法像在c ++项目中那样使用它。

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

请任何人帮助我获取WindowsSdkverbinPath以便在c#项目的prebuild和postbuildevents中使用它。

解决方法

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

$(WindowsSdkverbinpath)$(WindowsSdkDir)C++项目上工作,而不是到目前为止的C#项目。

因此,您无法通过 MSBuild C#项目上获得最新版本的 Win10套件

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

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

所以,我建议您可以使用此:

建议

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

enter image description here

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

<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#项目文件夹中。

可能会更方便。