[英]How do I deploy two ClickOnce versions simultaneously?
我希望能够为我的应用程序提供一个测试 ClickOnce 服务器,用户可以在其中并行运行生产版本和测试版本。 这可能吗?
我首先尝试在AssemblyInfo.cs
中使用以下内容,并在 ClickOnce 部署中更改名称,尽管所有这些实现都是用测试版本覆盖用户的生产版本。 同样,当他们回到生产服务器时,它也做了同样的事情。
#if DEBUG
[assembly: AssemblyTitle("Product Name - Test")]
#else
[assembly: AssemblyTitle("Product Name")]
#endif
我想我还应该澄清一下,这两个部署位置彼此不同,并且在不同的服务器上。
更新
我还尝试根据调试模式为清单设置 GUID,但它同样不起作用(下面使用虚拟 GUID)。
#if DEBUG
[assembly: Guid("AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA")]
#else
[assembly: Guid("BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB")]
#endif
两者如何区分? 似乎安装程序将它们视为两个独立的程序,因为我得到了每个程序的安装确认。 虽然,当我安装第二个时,“添加/删除程序”只看到后者,虽然前者仍在磁盘上,因为当我 go 稍后重新安装它时,它只是简单地运行,但随后添加/删除程序切换回到以前的名字。
听起来有些la脚,但是最简单的方法是在解决方案中包含两个EXE项目。 这些中的每一个的Main
方法将只在原始EXE项目中调用Main
方法(您将刚刚转换为DLL文件)。
这意味着每个EXE项目都可以具有自己的ClickOnce发布设置以及自己的app.config
文件。 这意味着生产版本和测试版本具有不同的连接字符串。
您的另一种选择(似乎最有意义的选择)是使用MageUI.exe手动生成ClickOnce文件,这样您就可以选择其他配置文件,并在每次运行该工具时发布位置。 还有一个命令行版本(Mage.exe),因此从理论上讲您可以使它自动化。
但是,我们发现使用两个“运行程序”项目的解决方案要简单得多。 我建议您先尝试一下。
ClickOnce:并发版本说明了如何执行此操作。
我手动编辑了.csproj
以为debug/release
指定一个不同的ProductName。
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
<PublishUrl>publishbeta\</PublishUrl>
<InstallUrl>http://www.softwareabc.com/download/beta/</InstallUrl>
<ProductName>Software ABC Test</ProductName>
<AssemblyName>SoftABCTest</AssemblyName>
<ApplicationIcon>Resources\Test.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
...
<PublishUrl>publish\</PublishUrl>
<InstallUrl>http://www.softwareabc.com/download/</InstallUrl>
<ProductName>Software ABC</ProductName>
<AssemblyName>SoftABC</AssemblyName>
<ApplicationIcon>Resources\Application.ico</ApplicationIcon>
</PropertyGroup>
一个警告是,如果在调试/发行版之间切换,Visual Studio 2010不会更新此版本。 它仅在加载解决方案时生效,因此请确保切换调试/释放,然后关闭并重新打开解决方案。
请参见有关并发版本控制的简要视频: ClickOnce:并发版本 。
尝试在属性窗口的“应用程序”选项卡中更改程序集名称。
在至少将项目配置为发布“单击一次”应用程序之后,您必须手动编辑csproj。
将与“单击一次”相关的某些属性从<PropertyGroup>
移到<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
属性组,并在<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
下复制它们<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
属性组。
要复制的属性是ApplicationRevision
(仅在需要单独的修订计数器的情况下), PublishUrl
, ProductName
和SuiteName
(需要最后两个才能区分目标计算机上的配置)。 您还必须重写AssemblyName
属性(不能从第一组中将其删除)。
如果要能够在任何配置下调试项目,则还必须在覆盖AssemblyName
属性的每个组中添加StartAction
和StartProgram
属性。
在为这些属性指定了足够的值(即不同的值)之后,您只需选择所需的配置就可以发布两个配置, 而无需修改项目 。 但是请注意, 您将必须在不同配置的发布之间卸载项目 ,否则Visual Studio会弄乱您的参数。
之后,您还可以将两个版本安装在同一台目标计算机上。
我一直都这样。 我什至在我的应用程序中都有一个屏幕,用于更改特定用户将获得的版本。 而且我在应用程序方面没有做任何棘手的事情,所有的魔力都在托管ClickOnce文件的Web服务器上。
看一下我的伙伴写的文章,《 ClickOnce的精细粒度版本控制》 。 它说明了我们是如何做到的。
Peter Mortensen的两个项目方案的变体。 我想要开发人员,客户测试和客户发布。 在我的情况下,我希望客户测试提供一些视觉线索,表明它是经过测试的,而不是实时的(例如标题中的“ TEST”和其他视觉主题)。
我发现拥有两个解决方案以及两个存根项目是最简单的。 每个项目都在其自己的目录中,并带有自己的存根program.cs,app.config和assemblyinfo.cs。
在开发/测试解决方案中,调试配置用于开发,发布配置用于客户测试。 我使用SlowCheetah来转换后者的app.config。
在客户发布解决方案中,我只需要一个发布配置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.