14

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

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

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

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

PS 视觉工作室 2008; 所有用户都使用 .NET Framework 3.5 SP1。

4

1 回答 1

18

诀窍是匹配所谓的程序集标识

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

  • 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 中的“代码库”字段提供正确的相对路径,请使用以下代码段:

<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:耐心,提供旧的工作清单,以及一个很好的舒适差异工具。


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

编辑:我发布了一个工作示例,说明如何从 MSBuild 调用 Mage - 但是工作并不意味着您可以将其插入,因为您可能想要更改许多设置,并且您仍然需要一定程度上了解 ClickOnce。但希望它可以提供一个有用的起点。

于 2010-01-05T02:40:37.153 回答