如何使用MSBuild将ClickOnce Build发布到CD

时间:2008-12-09 17:31:38

标签: clickonce

有没有人知道如何使用MSBuild中的发布任务为CD创建ClickOnce出版物?

VS2008有一个'发布向导',可以选择发布到CD单选按钮。它会在安装到适合刻录到CD的本地文件夹后发布一次单击。

我们正在遵循预定的MSBuild,其中包含后处理步骤,我们将其配置并安装到给定的环境中,我们希望有一种可编写脚本的方法来生成ClickOnce输出的CD。

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

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

我可以看到自动化ClickOnce可以完成,但总的来说,它似乎是一种GUI技术,而且脚本似乎与它的结果不符。

比尔

2 个答案:

答案 0 :(得分: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安装的。如果我断开与互联网的连接,我会得到一个“无法连接到远程服务器”的例外情况,因此不仅要检查更新,还要坚持从网络服务器进行安装。

答案 1 :(得分:1)

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

这是Http编码的问题!

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

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

当你这样做时,MageUi.exe HttpEncodes application.manifest的“位置”。

现在,部署清单显示应用程序清单的本地文件路径如下所示:Application%20Files \ myApp_version \ myApp.exe.manifest

由于该路径不存在,因此它可能导致基于CD的安装实际从http:update服务器安装(如果存在),如果不存在则失败

我们的工作是将“应用程序文件”重命名为“ApplicationFiles”。

...难以置信