繁体   English   中英

如何同时部署两个 ClickOnce 版本?

[英]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 (仅在需要单独的修订计数器的情况下), PublishUrlProductNameSuiteName (需要最后两个才能区分目标计算机上的配置)。 您还必须重写AssemblyName属性(不能从第一组中将其删除)。

如果要能够在任何配置下调试项目,则还必须在覆盖AssemblyName属性的每个组中添加StartActionStartProgram属性。

在为这些属性指定了足够的值(即不同的值)之后,您只需选择所需的配置就可以发布两个配置, 而无需修改项目 但是注意, 您将必须在不同配置的发布之间卸载项目 ,否则Visual Studio会弄乱您的参数。

之后,您还可以将两个版本安装在同一台目标计算机上。

我一直都这样。 我什至在我的应用程序中都有一个屏幕,用于更改特定用户将获得的版本。 而且我在应用程序方面没有做任何棘手的事情,所有的魔力都在托管ClickOnce文件的Web服务器上。

看一下我的伙伴写的文章,《 ClickOnce的精细粒度版本控制》 它说明了我们是如何做到的。

Peter Mortensen的两个项目方案的变体。 我想要开发人员,客户测试和客户发布。 在我的情况下,我希望客户测试提供一些视觉线索,表明它是经过测试的,而不是实时的(例如标题中的“ TEST”和其他视觉主题)。

我发现拥有两个解决方案以及两个存根项目是最简单的。 每个项目都在其自己的目录中,并带有自己的存根program.cs,app.config和assemblyinfo.cs。

在开发/测试解决方案中,调试配置用于开发,发布配置用于客户测试。 我使用SlowCheetah来转换后者的app.config。

在客户发布解决方案中,我只需要一个发布配置。

可以在不更改 AssemblyName 的情况下部署同一应用程序的 2 个版本,这是如何完成的...

  1. 创建一个 clickonce 部署
  2. 打开 .application 文件并进行以下编辑:

在此处输入图像描述 3. 运行安装程序,MyApp 将被安装。 根据之前的尝试,您可能需要使用 mage -cc 清除应用程序缓存

  1. 再次编辑 .application 文件,用 MyApp2 替换 MyApp

  2. 运行安装程序并安装 MyApp2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM