1

有谁知道如何使用 MSBuild 中的发布任务为 CD 创建 ClickOnce 发布?

VS2008 有一个“发布向导”,带有一个发布到 CD 单选按钮选项。一旦安装到适合刻录到 CD 的本地文件夹,它就会发布单击。

我们正在按照计划的 MSBuild 进行后处理步骤,在这些步骤中我们对其进行配置并将其安装到给定的环境中,并且我们希望有一种可编写脚本的方式来生成 ClickOnce 输出的 CD。

我已经能够使此过程适用于 Web 安装和文件共享安装,但似乎“发布向导”执行了一些我无法发现的隐藏步骤。

我想将发布对话框、发布向导、msbuild 发布目标、mage.exe 和 mageui.exe 中的各种属性关联起来。有些项目具有相同的名称,有些在对话框和属性之间有所不同,有些可以在一个区域中设置,但不能在另一个区域中设置。

我可以看到自动化 ClickOnce 是可以做到的,但总的来说,它似乎是一种 GUI 技术,而编写脚本似乎违背了它的原则。

账单

4

2 回答 2

1

好吧,我已经回答了我自己的问题。

这是Http编码的问题!

发布应用程序时,您最终会得到如下文件夹结构:C:\myApp\Application Files\version 1

当您更改已发布应用程序的内容时(就像您想要替换配置文件时所做的那样),您必须重新签署应用程序和部署清单。

当你这样做时,MageUi.exe HttpEncodes 应用程序清单的“位置”。

所以现在,部署清单表明您的应用程序清单的本地文件路径类似于:Application%20Files\myApp_version\myApp.exe.manifest

并且由于该路径不存在,因此它会导致所谓的基于 CD 的安装从 http: 更新服务器实际安装(如果存在),如果不存在则失败

我们的解决方法是将“Application Files”重命名为“ApplicationFiles”。

难以置信的...

于 2008-12-11T18:12:14.820 回答
1

除此之外,它似乎与在发布步骤的输出上运行 MageUi 有关。

如果我从命令行使用 MSBuild 发布,则如下所示:

msbuild  C:\myapp.vbproj /target:publish `
/property:PublishDir=c:\ClickOnce\ `
/property:SolutionDir=C:\trunk\myapp\ `
/property:TargetZone=LocalIntranet `
/property:MapFileExtensions=True `
/property:PublisherName='my publisher' `
/property:ProductName='myProduct' `
/property:BootstrapperEnabled=True `
/property:IsWebBootstrapper=False `
/property:GenerateManifests=True `
/property:ApplicationVersion=1.2.3.4 `
/property:Configuration=Debug `
/property:UpdateUrl=http://localhost/ClickOnce/ `
/property:UpdateEnabled=True `
/property:Install=True 

然后我创建一个可从 CD 安装的文件夹。

当我操作配置文件,并将来自另一个进程的附加输出添加到发布文件夹,然后使用 MageUI 重新生成应用程序和部署清单时,我创建了一个基于文件的安装,该安装实际上是从 updateURL 安装的。如果我断开与 Internet 的连接,我会收到“无法连接到远程服务器”异常,因此它不仅要检查更新,还要坚持从 Web 服务器安装。

于 2008-12-09T23:41:52.953 回答