从两个不同位置安装ClickOnce应用程序

时间:2011-03-15 19:25:30

标签: c# .net-3.5 deployment msbuild clickonce

我在.NET framework 3.5,Service Pack 1中使用C#开发了一个Windows窗体应用程序。可以基于开发数据库和生产数据库发布应用程序。我正在使用MSBuild社区任务来发布我的应用程序。将应用程序发布到不同位置(即开发位置和生产位置)时,我不会遇到任何问题。

问题:

  1. 将开发应用程序安装到我的机器后,我无法安装生产应用程序。它给我一个错误说:

      

    您无法从此位置启动应用程序TEST   因为它已经从不同的位置安装了

  2. 问题:机器如何理解我正在尝试安装相同的应用程序?我假设它有某种应用程序ID。如果是这种情况,我可以根据位置覆盖相关值。 (DEV或PROD)

    在我的应用程序的项目文件中发布时的当前代码:

    <Choose>
        <When Condition=" '$(BuildEnvironment)' == 'DEV' ">
          <PropertyGroup>
            <PublishDir>\\A\B\development\</PublishDir>
            <BaseConnection>Data Source=SQL-DEV.company.com; Database=TEST;Uid=XYZ;Pwd=ABC;</BaseConnection>
    
          </PropertyGroup>
        </When>
    
        <When Condition=" '$(BuildEnvironment)' == 'PROD' ">
          <PropertyGroup>
            <PublishDir>\\A\B\production\</PublishDir>
            <BaseConnection>Data Source=SQL-PROD.company.com;; Database=TEST;Uid=XYZ;Pwd=ABC;</BaseConnection>
    
          </PropertyGroup>
        </When>
    </Choose>
    

    应用程序的发布就像一个魅力,并指向相关的数据库。我现在要做的就是能够在同一台机器上安装开发应用程序和生产应用程序而不会出现任何错误。

  3. 问题:一次申请与另一次申请的区别是什么?

4 个答案:

答案 0 :(得分:5)

所以我终于想出了如何部署同一个应用程序的不同版本。应用程序清单文件丢失deploymentProvider attribute of the deployment element.

在应用程序清单中添加部署元素的部署提供程序属性后,我能够从各个位置安装我的应用程序。但问题在于它覆盖了以前安装的应用程序。对于这个问题,我按照this tutorial来区分我的开发应用程序和生产应用程序。

现在一切都很好。 :)

答案 1 :(得分:1)

我有一个名为ClickOnceMore(www.clickoncemore.net)的产品,专为此类用途而设计。它的主要用途是自动构建构建的ClickOnce部分。

它完全支持宏扩展,允许您定义例如DEV和PROD版本。构建时,您可以定义要构建的环境,然后应用程序名称将反映出来。如果有机会,请查看。

答案 2 :(得分:0)

我要尝试的第一件事是转到Windows窗体项目的项目属性。在“发布”选项卡中,单击“选项”按钮,将“产品名称”更改为 YourProductName _Test或类似内容,然后查看是否允许您并排安装两个版本。

我从未尝试过这个,但我认为ClickOnce应用程序是由“发布者名称”和“产品名称”值的组合唯一标识的,如果是这种情况,这可能会解决您的问题...给它一个镜头..

答案 3 :(得分:0)

我知道这是一个旧线程,但在尝试更新程序的旧版本时,我遇到了与WPF相同的错误。我不得不卸载旧版本并重新运行一次安装程序,然后它工作正常。

我以为我会在这里张贴。