有没有人知道如何使用MSBuild中的发布任务为CD创建ClickOnce出版物?
VS2008有一个'发布向导',可以选择发布到CD单选按钮。它会在安装到适合刻录到CD的本地文件夹后发布一次单击。
我们正在遵循预定的MSBuild,其中包含后处理步骤,我们将其配置并安装到给定的环境中,我们希望有一种可编写脚本的方法来生成ClickOnce输出的CD。
我已经能够使这个过程适用于Web安装和文件共享安装,但似乎“发布向导”做了一些我无法发现的隐藏步骤。
我试图关联发布对话框,发布向导,msbuild发布目标,mage.exe和mageui.exe中的各种属性。有些项目具有相同的名称,有些项目在对话框和属性之间有所不同,有些项目可以设置在一个区域中,但不能设置在另一个区域中。
我可以看到自动化ClickOnce可以完成,但总的来说,它似乎是一种GUI技术,而且脚本似乎与它的结果不符。
比尔
答案 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”。
...难以置信