诀窍是匹配所谓的程序集标识。
提示 #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。但希望它可以提供一个有用的起点。