我有一个WPF应用程序,希望通过ClickOnce部署给我们的用户。我们有四个环境,系统测试,用户测试,并行生产和生产。每个服务器都需要一个带有服务器名称和环境特定内容的不同配置文件,因此它们不能全部使用相同的代码库。大多数代码是相同的,但是由于不同的.config文件,最终的软件包会略有不同。
我发现的是,我们在用户测试中安装了一个版本,例如版本05,然后对其进行测试,然后当需要给他们下一个版本时,我们应该能够将更新的程序包放在用户测试中Web服务器,然后他们可以通过单击部署URL来更新其版本。但是当他们这样做时,它会说“具有相同标识的应用程序已经存在”,我们必须通过控制面板进行卸载才能安装版本06。这似乎是错误的,而不是单击的要点。
您如何建议我将该应用程序构建并部署到四个不同的环境中,以便在每个环境中我们都能够将新版本放置在服务器上,而在该环境中进行测试或使用的用户只会拉下更新并不需要卸载任何东西吗?
最佳答案
一段时间以来,我一直在寻找解决方案,这让我感到很惊讶,我想到的最后一个实际上很简单:
Slow Cheetah用于根据所选的构建配置转换配置文件(例如,调试/发布)
每个构建配置的一个属性组,在项目文件中具有特定的单击一次项目属性(例如ProductName和AssemblyName(用于并行安装测试和产品版本),InstallUrl)。
在执行/ target:publish时通过msbuild指定其他属性(例如ApplicationVersion,MinimumRequiredVersion)
无需手动复制任何配置文件,因为缓慢的猎豹会处理此问题。单击一次包将在相应的构建配置的输出文件夹(例如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>
关于deployment - Clickonce部署到多个环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14775202/