到目前为止,我们的应用程序已通过Visual Studio“发布”向导使用ClickOnce发布。这非常痛苦,我们使用msbuild / mage自动化了这个过程。
不幸的是,新部署似乎与旧部署不兼容,在(测试)用户更新时给出“部署标识与订阅不匹配”错误。
现在使用“发布”和我们的Mage脚本生成的文件之间存在很多差异,但我们无法全部消除它们。例如,GenerateDeploymentManifest
似乎不尊重“Publisher”,而Mage -New Deployment
无法将UpdateMode设置为Foreground。还有其他类似的案例。
有没有人成功地离开了“发布”向导而不需要整个用户群重新安装应用程序?你的方法是什么?
P.S。 VisualStudio 2008;所有用户都在.NET Framework 3.5 SP1上。
答案 0 :(得分:17)
诀窍是匹配所谓的 assembly identity 。
提示#1 :不要使用Mage生成部署清单(* .application文件)。请改用GenerateDeploymentManifest
。 Mage工具缺少两个关键选项:
提示#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。但希望它能提供一个有用的起点。