我会对你说实话,保罗。我从来没有对 ClickOnce 感到非常兴奋。除了手动发布/部署方面,该工具集似乎从未真正成熟过。通过 MSBuild 运行这些东西从来都不是一个好的体验,而且Mage.exe似乎总是对我有问题。大多数时候,我的问题都围绕着版本号设置不正确。
也就是说,我认为我们最大的麻烦来自试图通过 Visual Studio 中的设置 UI 来管理事物。尝试减少对 MSBuild“魔术”的依赖并将必要的参数传递到 MSBuild 并在 csproj 文件中进行更多控制,这对我很有帮助。
我不知道您的构建设置是什么样的,但对我们来说,我们让Jenkins运行一个Rake文件,该文件在解决方案上调用 MSBuild。这允许我们将特定参数从 Rake 文件发送到 MSBuild。
具体来说,我们推入ApplicationVersion
、ApplicationRevision
、MinimumRequiredVersion
和 的值OutDir
。至于 csproj 本身需要注意的事项,您要确保已设置ManifestCertificateThumbprint
、和。我们还将默认构建目标设置为,但我不确定这是否相关。ManifestKeyFile
GenerateManifests
SignManifests
Publish
我无法解释为什么 ClickOnce 会“设计”您的可执行文件,除了您正在签名的可执行文件可能不是您认为打包在 ClickOnce 包中的那个。换句话说,它可能正在构建一个新的可执行文件并将其放入包中,而不是您已经签名的那个。不过,我想我必须更多地了解您的设置才能确定拨打电话。
对于它的价值,如果我可以再做一次,我不会把我的鸡蛋放在 ClickOnce 篮子里。对于运行 Internet Explorer 或已安装 Chrome 插件的用户来说,这确实是一次很棒的体验。这是更多的工作,但我目前正在研究一个模仿 Chrome 更新故事的解决方案。他们有一个供 Internet Explorer 用户使用的 ClickOnce 包,但它实际上只用于下载安装 Chrome.exe 和 Update.exe 的 Windows 安装程序包。他们在Omaha(也称为 Google 更新)的技术文档中详细介绍了很多细节。