Clickonce部署到多个环境

NZJ*_*mes 17 deployment clickonce

我有一个WPF应用程序,我想通过ClickOnce部署给我们的用户.我们有四个环境,系统测试,用户测试,并行生产和生产.每个都需要一个不同的配置文件,其中包含服务器名称和特定于环境的其他内容,因此它们不能全部使用相同的代码库.大多数代码是相同的,但由于不同的.config文件,最终的包将略有不同.

我发现我们在用户测试中安装了一个版本,比如版本05,然后他们进行测试,然后在给他们下一个版本的时候,我们应该能够在用户测试上放一个更新的包Web服务器,然后他们可以通过单击部署URL更新其版本.但是当他们这样做时,它说"具有相同身份的应用程序已经存在",我们必须通过控制面板卸载才能安装版本06.这似乎是错误的,而不是clickonce.

您如何建议我将此应用程序构建和部署到四个不同的环境中,以便在每个环境中我们都能够在服务器上放置新版本,并且用户在该环境中测试或使用它只会降低更新和不需要卸载任何东西?

Mar*_*nke 16

我一直在寻找解决方案一段时间,让我感到震惊的是,我想出的最后一个实际上就像这样简单:

  • Slow Cheetah基于所选的构建配置转换配置文件(例如Debug/Release)
  • 每个构建配置的属性组,具有项目文件中特定的单击一次项目属性(例如,ProductName和AssemblyName(用于并行安装test和prod版本),InstallUrl).
  • 执行/ target时,通过msbuild指定其他属性(如ApplicationVersion,MinimumRequiredVersion):publish

没有必要手动复制任何配置文件,因为慢速猎豹会处理这个.click one包将在相应的构建配置的输出文件夹中创建(例如bin/Debug或您拥有的任何内容).

最大的优点是使用Visual Studio或使用msbuild进行自动构建时的构建是相同的(除了少数几个完全可选的附加属性).要为构建添加其他环境,您只需要在项目文件中创建新的构建配置和相应的慢速猎豹变换以及属性组.

整个设置至少使用.NET 3.5(不能谈论早期版本)和更高版本.

也许这有助于任何人.随意询问详情.

PS:属性组看起来像这样(将它们放在定义默认ClickOnce设置的第一个属性组之后):

  <PropertyGroup Condition=" '$(Configuration)' == 'Demo' ">
    <AssemblyName>Com.MyApplication.Main.Demo</AssemblyName>
    <InstallUrl>http://demoserver/myapp/</InstallUrl>
    <ProductName>My Application %28Demo%29</ProductName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Test' ">
    <AssemblyName>Com.MyApplication.Main.Test</AssemblyName>
    <InstallUrl>http://testserver/myapp/</InstallUrl>
    <ProductName>My Application %28Test%29</ProductName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Prod' ">
    <AssemblyName>Com.MyApplication.Main</AssemblyName>
    <InstallUrl>http://prodserver/myapp/</InstallUrl>
    <ProductName>My Application</ProductName>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

  • 每当更改构建配置时,如何使Visual Studio不要编写InstallUrl,UpdateURl和ProductName属性? (3认同)
  • @MyItchyChin好吧,其实我没有.只要不在Visual Studio中打开项目属性页,就不应更改属性组.此外,源代码管理确保至少您注意到并且如果出现问题则有机会恢复.仍然比使用法师好多了...... (2认同)

Rob*_*Net 3

首先,您无法从两个不同的 URL 安装具有相同部署名称的应用程序,而无需先卸载一个应用程序。ClickOnce 使用此功能来确保安全,以确保有人不会尝试劫持您的部署。

其次,为了进行不同的构建,您可以在项目下设置四个文件夹,每个文件夹都有一个名称。然后设置四个构建配置(称它们为同一事物)。然后设置一个构建后命令,将文件复制到 \bin 文件夹中。如果您将文件夹名称设置为在其中包含构建配置,它将复制与该配置对应的文件夹名称。

COPY/Y "$(TargetDir)myfile_$(ConfigurationName)\*.*" "$(TargetDir)"
Run Code Online (Sandbox Code Playgroud)

第三,您必须将文件包含在项目本身中,以便将它们标记为包含在部署中,即使您在构建完成后使用复制命令替换它们。并且这四个目录也必须包含在内,即使最终它们没有被使用。