如何在C#Post构建步骤中创建更多宏

时间:2014-08-12 11:48:23

标签: c# visual-c++ visual-studio-2012 post-build-event

我有一个包含C#和C ++项目的Visual Studio 2012解决方案。

我想创建一个postbuild步骤,我注意到C ++项目比C#项目有更多的宏。我需要获得 WindowsSDKDir ,它可以在C ++宏中使用,但不能在C#宏中使用。

C ++宏 Macros available for C++ Projects

C#宏

enter image description here

我可以在C#项目中看到C ++项目可用的所有宏吗?

2 个答案:

答案 0 :(得分:1)

我可以考虑以下解决方法。写这个post-build命令:

$(ProjectDir)post_build.bat

在项目目录中创建post_build.bat文件,并通过以下方式填写:

echo %WindowsSdkDir%
echo %WinDir%

构建项目,打印:

ECHO is on.
C:\Windows

因此,C#不够智能,无法看到Visual Studio构建环境变量(%WindowsSdkDir%扩展为空),但至少扩展了一般环境变量WinDir。因此,您可以使用与WindowsSDKDir相同的值创建自己的环境变量,并在从Post-Build步骤调用的批处理文件中使用它。

要使echo更有用,请创建包含参数(%1%%2%等的批处理文件),并在构建后步骤中调用它,并传递必需的参数。例如:

$(ProjectDir)post_build.bat $(TargetPath)

在批处理文件中%1%将作为输出文件名扩展。

答案 1 :(得分:0)

只需调用批处理文件,该文件将Visual Studio命令提示符的环境变量设置为构建事件的第一行。这将设置所有环境变量,以便在构建事件的后续行中使用。例如......

call "$(DevEnvDir)..\..\VC\vcvarsall.bat"
"%WindowsSdkDir%bin\x86\rc.exe" <parameters>

请注意,环境变量是Windows环境变量,需要通过%VAR_NAME%语法而不是$(VAR_NAME)语法进行访问。

vcvarsall.bat文件的位置至少在VS2012,2013和2015上是一致的,这意味着此解决方案是通用的,并且不需要针对不同的VS版本进行调整。

如果你使用msbuild,你会发现在msbuild中构建时没有正确设置$(DevEnvDir)。在这种情况下,这个替代方案应该适用于msbuild和visual studio构建,只要你没有自定义visual studio安装位置。

call "%ProgramFiles(x86)%\Microsoft Visual Studio $(VisualStudioVersion)\VC\vcvarsall.bat"