如何从Visual Studio ClickOnce“发布”向导迁移到MSBuild / mage部署?

时间:2010-01-04 23:35:39

标签: clickonce mage

到目前为止,我们的应用程序已通过Visual Studio“发布”向导使用ClickOnce发布。这非常痛苦,我们使用msbuild / mage自动化了这个过程。

不幸的是,新部署似乎与旧部署不兼容,在(测试)用户更新时给出“部署标识与订阅不匹配”错误。

现在使用“发布”和我们的Mage脚本生成的文件之间存在很多差异,但我们无法全部消除它们。例如,GenerateDeploymentManifest似乎不尊重“Publisher”,而Mage -New Deployment无法将UpdateMode设置为Foreground。还有其他类似的案例。

有没有人成功地离开了“发布”向导而不需要整个用户群重新安装应用程序?你的方法是什么?

P.S。 VisualStudio 2008;所有用户都在.NET Framework 3.5 SP1上。

1 个答案:

答案 0 :(得分:17)

诀窍是匹配所谓的 assembly identity

提示#1 :不要使用Mage生成部署清单(* .application文件)。请改用GenerateDeploymentManifest。 Mage工具缺少两个关键选项:

  • Mage无法指定部署的文化。正如您从上面的链接中看到的那样,如果文化不匹配,那么ClickOnce就是一个不同的应用程序。哎哟。
  • 无法将更新模式设置为“前景”,即“开始前检查更新”,即“在线应用程序”。嗯...

提示#2 :请使用Mage添加发布者并签署部署证书。这是因为GenerateDeploymentManifest似乎忽略了Publisher(至少在3.5 SP1中),同样SignFile无法使用.pfx文件作为密钥。糟糕。

<Exec Command='"c:\path\to\mage.exe" -Update "$(MyOutputPath)\MyApp.application" -Publisher MyCompany.com -CertFile path\to\MyAppKey.pfx'/>

提示#3 :要为部署XML中的“codebase”字段提供正确的相对路径,请使用以下代码段:

<CreateItem Include="$(MyDeploymentPath)\v$(Version)\MyApp.exe.manifest" AdditionalMetadata="TargetPath=v$(Version)\MyApp.exe.manifest">
  <Output TaskParameter="Include" ItemName="EntryPoint"/>
</CreateItem>

然后将EntryPoint="@(EntryPoint)"传递给GenerateDeploymentManifest。关键位是“TargetPath”元数据。呸!

提示#4 :耐心,提供旧的工作清单,以及舒适的差异工具。


这是复杂而痛苦的吗?是!但它比发布向导更好吗?哦,是的!

修改:我发布了一个正常工作example of how one might invoke Mage from MSBuild - 但正常工作并不意味着您可以将其插入,因为有很多设置涉及您可能想要改变,并且您仍然需要在某种程度上理解ClickOnce。但希望它能提供一个有用的起点。

相关问题