我希望能够为我的应用程序提供测试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
两者如何区分?似乎安装程序将它们视为两个单独的程序,因为我得到了每个程序的安装确认。虽然,当我安装第二个时,“添加/删除程序”只看到后者,虽然前者仍然在磁盘上,因为当我稍后重新安装它时,它只是简单地运行,但随后添加/删除程序切换回到以前的名字。
答案 0 :(得分:26)
听起来有点蹩脚,但最简单的方法是在解决方案中安装两个EXE项目。每个Main
方法只调用原始EXE项目中的Main
方法(您刚刚将其切换为DLL文件)。
这意味着每个EXE项目都可以拥有自己的ClickOnce发布设置,以及自己的app.config
文件。这意味着您有生产和测试版本的不同连接字符串。
您的其他选项(可能看起来最有意义的选项)是使用MageUI.exe手动构建ClickOnce文件,这样您就可以选择不同的配置文件并在每次运行时发布位置工具。还有一个命令行版本(Mage.exe),所以你理论上可以自动化它。
然而,我们发现两个“跑步者”项目的解决方案远比简单得多。我建议你先试试。
答案 1 :(得分:13)
ClickOnce: Concurrent versions 解释了如何执行此操作。
答案 2 :(得分:6)
我手动编辑了.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不会更新此项。它仅在加载解决方案时生效,因此请确保切换调试/释放然后关闭并重新打开解决方案。
答案 3 :(得分:1)
尝试在属性窗口的“应用程序”选项卡中更改“程序集名称”。
答案 4 :(得分:1)
请参阅有关并发版本控制的简洁视频: ClickOnce: Concurrent versions 。
答案 5 :(得分:0)
我一直这样做。我的应用程序中甚至有一个屏幕可以更改特定用户将获得的版本。而且我在应用程序方面没有做任何棘手的事情,所有的魔力都在托管ClickOnce文件的Web服务器上。
看看我的好友写的文章 Fine Grained Versioning with ClickOnce 。它解释了我们是如何做到的。
答案 6 :(得分:0)
Peter Mortensen的两个项目方案的变体。我想要开发人员,客户测试和客户发布。就我而言,我希望客户测试提供一些视觉线索,表明它是经过测试的,而不是实时的(例如标题中的“ TEST”和其他视觉主题)。
我发现拥有两个解决方案以及两个存根项目是最简单的。每个项目都在其自己的目录中,并带有自己的存根program.cs,app.config和assemblyinfo.cs。
在开发/测试解决方案中,调试配置用于开发,发布配置用于客户测试。我使用SlowCheetah来转换后者的app.config。
在客户发布解决方案中,我只需要一个发布配置。
答案 7 :(得分:0)
在至少一次将项目配置为发布“单击一次”应用程序之后,您必须手动编辑csproj。
将一些“单击一次”相关属性从<PropertyGroup>
移动到<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
属性组,并在<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
属性组下复制它们。
要复制的属性为ApplicationRevision
(仅在需要单独的修订计数器的情况下),PublishUrl
,ProductName
和SuiteName
(需要最后两个才能区分目标计算机上的配置)。您还必须覆盖AssemblyName
属性(不能从第一组中将其删除)。
如果要能够在任何配置下调试项目,则还必须在覆盖StartAction
属性的每个组中添加StartProgram
和AssemblyName
属性。
为这些属性赋予足够的值(即不同的值)后,您只需选择所需的配置即可无需修改项目即可发布这两种配置。但是请注意,您将必须在不同配置的发布之间卸载项目,否则Visual Studio会弄乱您的参数。
之后,您还可以将两个版本安装在同一台目标计算机上。