postbuild-event失败,因为MSB3073

时间:2017-06-01 11:00:19

标签: visual-studio-2010 post-build-event assembly-signing

我正在使用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\ enter image description here

编辑:我将"$(DevEnvDir)..\tools\vsvars32.bat"的调用替换为vsvars32所在的实际路径并且有效。所以看起来虽然我可以看到变量在VS中被适当地设置但是当构建项目时它没有被适当地评估。

1 个答案:

答案 0 :(得分:2)

您没有指定是否在DebugRelease版本中进行了测试。

如果这只发生在Release版本中,那么可能改为设置obj文件夹中的exe:

editbin /LARGEADDRESSAWARE "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"

(如https://www.experts-exchange.com/questions/23694055/MSBuild-Publish-Mode-Post-Build-Event-not-executing-on-target-app-publish-files.html中所述)

注意:确切的路径取决于您的构建配置。

如果这有帮助,并且包括两个 editbin行都不能正常工作,那么请查看其他stackoverflow线程以获取正确的语法,以便为Debug指定一行,另一行Release的行。

更新刚试过这个;它只与某些“发布”场景有关。可能对你的情况没有影响。

仅供参考,另一个相关问题(虽然它不会导致提到的错误消息)是如果您使用visual studio主机进行调试,largeaddressaware将无法正常工作。见https://stackoverflow.com/a/3963184/199364