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

Rom*_*kov 14 clickonce mage

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

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

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

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

PS VisualStudio 2008; 所有用户都在.NET Framework 3.5 SP1上.

Rom*_*kov 17

诀窍是匹配所谓的装配身份.

提示#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'/>
Run Code Online (Sandbox Code Playgroud)

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

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

然后传递EntryPoint="@(EntryPoint)"GenerateDeploymentManifest.关键位是"TargetPath"元数据.呸!

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


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

编辑:我已经发布了一个如何从MSBuild调用Mage的工作示例 - 但是工作并不意味着你可以插入它,因为你可能想要改变很多涉及的设置,你仍然需要在某种程度上理解ClickOnce.但希望它能提供一个有用的起点.