我有一个包含C#和C ++项目的Visual Studio 2012解决方案。
我想创建一个postbuild步骤,我注意到C ++项目比C#项目有更多的宏。我需要获得 WindowsSDKDir ,它可以在C ++宏中使用,但不能在C#宏中使用。
C ++宏
C#宏
我可以在C#项目中看到C ++项目可用的所有宏吗?
答案 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"