Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C项目的预构建和后构建事件中获取最新的windows sdk版本路径?_C#_Visual Studio_Msbuild_Visual Studio 2019_Mt - Fatal编程技术网

C# 如何在C项目的预构建和后构建事件中获取最新的windows sdk版本路径?

C# 如何在C项目的预构建和后构建事件中获取最新的windows sdk版本路径?,c#,visual-studio,msbuild,visual-studio-2019,mt,C#,Visual Studio,Msbuild,Visual Studio 2019,Mt,在我的Visual Studio 2010项目中,我们正在C项目中运行预构建和后构建事件,如下所示: prebuildevent:C:\Program Files x86\Microsoft SDK\Windows\v7.0A\Bin\rc.exe$ProjectDir$ProjectName.rc postbuildevent:C:\Program Files x86\Microsoft SDK\Windows\v7.0A\Bin\mt.exe-manifest$ProjectDir$Targ

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

prebuildevent:C:\Program Files x86\Microsoft SDK\Windows\v7.0A\Bin\rc.exe$ProjectDir$ProjectName.rc

postbuildevent:C:\Program Files x86\Microsoft SDK\Windows\v7.0A\Bin\mt.exe-manifest$ProjectDir$TargetName.exe.manifest-outputresource:$TargetDir$TargetFileName;一,

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

在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

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

我发现我们可以使用WINDOWSKDVBILINVROW变量获取最新的Windows SDK版本路径,但是在我的例子中,我可以使用它,像C++项目的$WINDOWSKDVBILINFROW,它解决了路径和C项目,我不能像C++项目那样使用它。 搜索WindowsSdkverbinpath的目的是在预构建和后构建事件中使用它来访问mt.exe和rc.exe


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

恐怕您目前无法在c项目中获得所需的内容

$WOWDOSSKVBILPATH和$WOWOSSDKDIR在C++项目上工作,而不是C项目。 因此,您无法通过C项目上的MSBuild获取最新版本的Win10工具包

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

因为打开每个C项目,然后更改rc.exe和mt.exe的路径可能会不方便

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

暗示

在项目文件夹中创建名为的文件

然后在该文件上添加以下内容:

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


这可能更方便。

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

$WOWDOSSKVBILPATH和$WOWOSSDKDIR在C++项目上工作,而不是C项目。 因此,您无法通过C项目上的MSBuild获取最新版本的Win10工具包

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

因为打开每个C项目,然后更改rc.exe和mt.exe的路径可能会不方便

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

暗示

在项目文件夹中创建名为的文件

然后在该文件上添加以下内容:

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


这可能更方便。

@PavelAnikhouski感谢您的回复,我正在寻找C:\Program Files x86\Windows Kits\10\bin\10.0.*.0中的mt.exe和rc.exe可执行文件,这里有多个sdk版本,我应该能够在C项目中使用该路径。在C++项目中,如果我使用$WOWDOSSKVLINBROWPAT\MT.EXE,它将采用最新的SDK版本,但是对于C项目的预构建,这个语法和变量我不能使用。@ PaveliikHokKi感谢答复,我在MT:EXE和R.EXE可执行文件中寻找C:\程序文件x86 \ Windows工具包\ 10 \bin 10。* 0,这里有多个sdk版本,我应该能够在c项目中使用该路径。在C++项目中,如果我使用$WOWDOSSKVBILPATH\MT.EXE,它将采用最新的SDK版本,但是对于C项目的预构建,我无法使用这个语法和变量。