部署 ClickOnce 应用程序以进行测试和生产服务器,而无需辞职

本文介绍 .NET Framework 版本 3.5 中引入的 ClickOnce 功能,该功能允许从多个网络位置部署 ClickOnce 应用程序,而无需重新签名或更改 ClickOnce 清单。

注释

重新签名仍然是部署新版本应用程序的首选方法。 尽可能使用辞职方法。 有关详细信息,请参阅 Mage.exe (清单生成和编辑工具)。

第三方开发人员和 ISV 可以选择加入此功能,使客户能够更轻松地更新其应用程序。 在以下情况下可以使用此功能:

  • 更新应用程序时,不用于应用程序的第一次安装。

  • 当计算机上只有一个应用程序配置时。 例如,如果应用程序配置为指向两个不同的数据库,则无法使用此功能。

从部署清单中排除 deploymentProvider

在 .NET Framework 2.0 和 .NET Framework 3.0 中,凡是为了离线使用而安装在系统上的 ClickOnce 应用程序,必须在其部署清单中列出一个 deploymentProvider。 通常 deploymentProvider 称为更新位置;它是 ClickOnce 检查应用程序更新的位置。 此要求以及应用程序发布者签署其部署的需求,使得公司很难从供应商或其他第三方更新 ClickOnce 应用程序。 它还使得从同一网络上的多个位置部署同一应用程序更加困难。

在 .NET Framework 3.5 中对 ClickOnce 所做的更改后,第三方可以将 ClickOnce 应用程序提供给另一个组织,后者随后可以在自己的网络上部署该应用程序。

为了利用此功能,ClickOnce 应用程序的开发人员必须从其部署清单中排除 deploymentProvider 。 此要求意味着在使用 Mage.exe创建部署清单时,必须排除 -providerUrl 该参数。 或者,如果使用 MageUI.exe 生成部署清单,则必须确保应用程序清单选项卡上的“启动位置”文本框留空。

注释

在 ClickOnce for .NET Core 3.1 和 .NET 5 或更高版本中,使用 dotnet-mage.exe 而不是 Mage.exe。 有关详细信息,请参阅 ClickOnce for .NET

部署提供程序和应用程序更新

从 .NET Framework 3.5 开始,你不再需要在部署清单中指定一个 deploymentProvider ,以便部署 ClickOnce 应用程序以用于联机和脱机使用。 此更改支持需要自行打包和签名部署的方案,但允许其他公司通过网络部署应用程序。

需要记住的要点是,排除 deploymentProvider 应用程序在更新期间无法更改其安装位置,直到它们再次交付包含标记的 deploymentProvider 更新。

下面是澄清这一点的两个示例。 在第一个示例中,发布没有 deploymentProvider 标记的 ClickOnce 应用程序,并要求用户从 http://www.adatum.com/MyApplication/中安装它。 如果你决定要从 http://subdomain.adatum.com/MyApplication/ 发布应用程序的下一次更新,那么在驻留于 http://www.adatum.com/MyApplication/ 的部署清单中无法标明这一点。 可以执行以下两项操作之一:

  • 告知用户卸载以前的版本,并从新位置安装新版本。

  • 包括一个更新 http://www.adatum.com/MyApplication/,其中包含一个deploymentProvider,指向http://www.adatum.com/MyApplication/。 然后,稍后发布另一个更新,使 deploymentProvider 指向 http://subdomain.adatum.com/MyApplication/

    在第二个示例中,您发布了一个指定了deploymentProvider的 ClickOnce 应用程序,然后决定将其删除。 一旦没有 deploymentProvider 的新版本下载到客户端,在发布已还原 deploymentProvider 的应用程序版本之前,无法重定向用于更新的路径。 与第一个示例一样, deploymentProvider 必须首先指向当前更新位置,而不是新位置。 在这种情况下,如果尝试插入指向http://subdomain.adatum.com/MyApplication/deploymentProvider,则下一次更新将失败。

创建部署

有关创建可从不同网络位置部署的部署的分步指南,请参阅 演练:手动部署不需要重新签名且保留品牌信息的 ClickOnce 应用程序