代码之家  ›  专栏  ›  技术社区  ›  Roman Starkov

如何从Visual Studio ClickOnce“发布”向导迁移到msbuild/mage部署?

  •  14
  • Roman Starkov  · 技术社区  · 16 年前

    到目前为止,我们的应用程序已经通过Visual Studio“发布”向导使用ClickOnce发布。这是相当痛苦的,我们已经使用msbuild/mage自动化了这个过程。

    不幸的是,新部署似乎与旧部署不兼容,在(测试)用户更新时出现“部署标识与订阅不匹配”错误。

    现在,使用“publish”生成的文件和我们的mage脚本有很多不同之处,但我们不能完全消除它们。例如,“出版商”似乎不受 GenerateDeploymentManifest ,同时 Mage -New Deployment 无法将UpdateMode设置为前台。还有其他类似的情况。

    是否有人在不要求整个用户群重新安装应用程序的情况下成功地离开“发布”向导?你的方法是什么?

    P.S.VisualStudio 2008;所有用户都在.NET Framework 3.5 SP1上。

    1 回复  |  直到 16 年前
        1
  •  17
  •   Roman Starkov    16 年前

    诀窍是与所谓的 assembly identity .

    提示1 :不要使用mage生成部署清单(*.application文件)。使用 GenerateDeploymentManifest 相反。法师工具缺少两个关键选项:

    • mage无法指定部署的区域性。从上面的链接可以看到,如果区域性不匹配,那么单击它是一个不同的应用程序。哎哟。
    • 无法将更新模式设置为“前台”,即“启动前检查更新”,即“在线应用程序”。隐马尔可夫模型。。。

    提示2 :请使用mage添加发布服务器并签署部署证书。这是因为 生成部署清单 似乎忽略了发布服务器(至少在3.5SP1中),并且类似地 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)" 生成部署清单 . 关键位是“targetpath”元数据。讨厌!

    提示4 :耐心,提供旧的工作清单,以及一个舒适的差异工具。


    这是复杂和痛苦的吗?对!但是它比发布向导好吗?哦,是的!

    编辑 :我发布了一个工作 example of how one might invoke Mage from MSBuild 然而 工作 但这并不意味着你可以直接插入它,因为你可能需要更改很多设置,而且在某种程度上你仍然需要理解clickOnce。但希望它能提供一个有用的起点。

    推荐文章