我正在使用Visual Studio 2010通过以下postbuild-event从C#项目构建程序集:
call "$(DevEnvDir)..\tools\vsvars32.bat"
editbin /largeaddressaware "$(TargetPath)"
sn -R "$(TargetPath)" "path/to/MySigningFile.snk"
然而,当我构建项目时,我得到了错误:
错误MSB3073:命令“call”* Undefined * .. \ tools \ vsvars32.bat“editbin / largeaddressaware”MyProgram.exe“ sn -R“MyProgram” “path / to / MySingingFile.snk”“以下面的代码9009终止。(1,1)
让我想知道的是错误中的“* undefined *”。但是,当我从构建后事件(项目属性 - >构建事件 - >编辑构建后... - > Makros)中打开环境设置时,我看到该变量应该保留价值C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\
编辑:我将"$(DevEnvDir)..\tools\vsvars32.bat"
的调用替换为vsvars32
所在的实际路径并且有效。所以看起来虽然我可以看到变量在VS中被适当地设置但是当构建项目时它没有被适当地评估。
答案 0 :(得分:2)
您没有指定是否在Debug
和Release
版本中进行了测试。
如果这只发生在Release
版本中,那么可能改为设置obj
文件夹中的exe:
editbin /LARGEADDRESSAWARE "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"
注意:确切的路径取决于您的构建配置。
如果这有帮助,并且包括两个 editbin
行都不能正常工作,那么请查看其他stackoverflow线程以获取正确的语法,以便为Debug
指定一行,另一行Release
的行。
更新刚试过这个;它只与某些“发布”场景有关。可能对你的情况没有影响。
仅供参考,另一个相关问题(虽然它不会导致提到的错误消息)是如果您使用visual studio主机进行调试,largeaddressaware将无法正常工作。见https://stackoverflow.com/a/3963184/199364