【问题标题】:postbuild-event fails because MSB3073构建后事件失败,因为 MSB3073
【发布时间】:2017-06-01 11:00:18
【问题描述】:

我正在使用 Visual Studio 2010 从 C# 项目构建程序集,其中包含以下 postbuild-event:

call "$(DevEnvDir)..\tools\vsvars32.bat"
editbin /largeaddressaware "$(TargetPath)"
sn -R "$(TargetPath)" "path/to/MySigningFile.snk"

但是,当我构建项目时,我得到了这个错误:

错误 MSB3073:命令“调用“*Undefined*..\tools\vsvars32.bat”editbin /largeaddressaware“MyProgram.exe” sn -R“我的程序” "path/to/MySingingFile.snk"" 以以下代码 9009 终止。 (1, 1)

让我好奇的是错误中的“*undefined*”。但是,当我从构建后事件(项目属性--> 构建事件--> 编辑构建后...--> Makros)中打开环境设置时,我看到该变量应该保存值@987654324 @

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

【问题讨论】:

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


    【解决方案1】:

    您没有指定是否在 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中提到的)

    注意:具体路径取决于您的构建配置。

    如果这有帮助,并且包含 both editbin 行不能正常工作,请查看其他 stackoverflow 线程以获取正确的语法以指定 Debug 的一行,@987654330 的另一行@。

    更新刚刚测试过;它仅与某些“发布”场景相关。可能对您的情况没有影响。


    仅供参考,另一个相关问题(尽管它不会导致提到的错误消息)是如果您使用 Visual Studio 托管进行调试,那么 largeaddressaware 将不起作用。见https://stackoverflow.com/a/3963184/199364

    【讨论】:

    • 我为调试而构建,但有趣的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    相关资源
    最近更新 更多