【问题标题】:Difference between 'Publish...' in VS and /target:publish in MSBuild?VS 中的“发布...”和 MSBuild 中的 /target:publish 之间的区别?
【发布时间】:2011-06-08 05:11:45
【问题描述】:

我们正在尝试发布 ClickOnce 应用程序,但我们不得不使用 MSBuild 这样做,因为我们遇到了 Visual Studio 错误,Visual Studio 愚蠢地坚持重新启用“应用程序应检查更新” ,这是我们不想要的。

使用 MSBuild 不会受此影响,但它不会产生与使用 Visual Studio 的“发布...”相同的输出(尽管 MSDN 这么说)。我们在构建后事件中混淆了代码,MSBuild 似乎在过程中的错误点对应用程序清单进行了签名。

为了记录,我们使用以下 MSBuild 命令行:

msbuild /t:Publish

使用 MSBuild 并启用混淆会产生输出,但是当我尝试从生成的清单安装应用程序时,我收到以下 ClickOnce 错误:

* Activation of http://download.foo.com/Test/Foo.application resulted in exception. Following failure messages were detected:
     + File, Foo.exe, has a different computed hash than specified in manifest.

禁用混淆不会产生此错误,但显然我们不会发布未经混淆的代码。

我尝试使用 MageUI 重新签署清单,但这似乎无法解决问题。

我的问题是:Visual Studio 有什么不同?它是否使用不同的 MSBuild 目标?如果有,是哪一个?如何解决我的证书问题?

【问题讨论】:

    标签: visual-studio-2010 msbuild clickonce publish


    【解决方案1】:

    问题可能是混淆。您可以尝试发布应用程序并在没有混淆的情况下对其进行签名并查看它的作用吗?

    此外,如果您使用的是法师: 1. 签署应用程序清单(版本化文件夹中的 appname.exe.manifest)。 2. 在部署文件夹的顶层文件夹中签署部署清单 (myapp.application)。 3. 签署部署清单时,请务必转到应用程序参考选项卡并单击“选择清单”并重新选择版本化文件夹中的应用程序清单,然后对其进行签名。这似乎很愚蠢,但需要签署部署清单。

    【讨论】:

    • 就像我在原始问题中提到的(可能没有明确表述),禁用混淆会导致发布成功完成,并且可以安装而不会出错。但是,我不想发布非混淆代码。问题不在于混淆本身,而在于命令行 MSBuild 似乎无法正确处理它。
    • 法师解决方案完美运行。现在要是能轻松实现自动化就好了……
    • 这篇来自 Microsoft ClickOnce 人员的博客展示了如何使用 mage 重新签署清单。这是 mageUI 的命令行版本,您可能会想出一种编写脚本的方法。 blogs.msdn.com/b/vsto/archive/2009/04/29/…
    【解决方案2】:

    我发现,如果您通过按发布选项卡中的“立即发布”按钮进行发布,“应用程序应检查更新”状态仍然存在,即 VS 不会再次打开它。但是,如果您通过下拉菜单项发布,它将重新启用检查。对我来说是一个明显的错误。

    【讨论】:

      猜你喜欢
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 2013-08-31
      • 2016-12-16
      • 2012-03-23
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多