可以在Visual Studio 2013中发布ClickOnce的特定配置选项



我有一个c#应用程序,有几个不同的构建配置不同的"口味"的应用程序。我想有ClickOnce发布选项为每个配置,而不是必须设置他们每次我做一个构建和发布。看起来发布选项适用于所有配置。是否有一种方法使发布选项特定于每个配置?

您不能直接在Visual Studio中为每个配置设置不同的属性。您需要编辑.csproj文件,并对您需要的内容进行以下更改。

。第一个<PropertyGroup>元素包含<PublishUrl>元素。您可以多次应用条件并添加元素:

<PublishUrl Condition=" '$(Configuration)' == 'Debug' ">debug</PublishUrl>
<PublishUrl Condition=" '$(Configuration)' == 'Release' ">release</PublishUrl>

当使用Debug配置发布项目时,它将被发布到debug目录。当项目使用Release配置发布时,它将被发布到release目录。

将此条件应用于需要修改的元素。遗憾的是,您可以将条件应用于整个PropertyGroup,但这要复杂得多,因为如果您对其中任何一组进行更改,则需要复制并跟踪两个组。

但是:

每当您从Visual Studio中保存项目时,该值将被覆盖。因此,您可以在发布之前创建一个xslt文件来转换文件,或者直接创建您自己的发布应用程序,仅在发布时填充所有必需的发布参数,例如从构建服务器。

编辑

这个答案没有帮助。自从我写它以来,我发现即使在使用选择元素时,Visual Studio IDE(至少VS2015)似乎也无法将其手从我们的配置中移开。虽然下面的代码可以工作,但在配置和发布之间切换时,IDE会在某个时候覆盖项目文件中的这一部分,使其不再按预期工作。

因为它在技术上是这样工作的,并且当使用其他工具发布时(或者当VS中的问题得到修复时)可能会有用,我将留下原始答案供参考。

原始回答

我也首先尝试了Herdo提到的解决方案,只是遇到了他提到的大"但是";Visual Studio在每次保存项目文件时重写条件。

然而,我发现使用Choose元素可以实现相同的行为,而无需Visual Studio干扰它。您仍然需要手动编辑.csproj文件。

简而言之,不要将条件直接应用于第一个属性组中的PublishUrl标记。它将被Visual Studio覆盖。相反,稍后在项目文件中定义另一个。在构建或发布时,第二个值将取代第一个值,但IDE将保留它。这是第二个你可以使用select组设置条件的选项。

在第一个属性组下面,像这样添加section:

  <Choose>
    <When Condition=" '$(Configuration)' == 'Debug' ">
      <PropertyGroup>
        <PublishUrl>yourdebugpublishlocation</PublishUrl>
      </PropertyGroup>
    </When>
    <When Condition=" '$(Configuration)' == 'Release' ">
      <PropertyGroup>
        <PublishUrl>yourreleasepublishlocation</PublishUrl>
      </PropertyGroup>
    </When>
  </Choose>

当然,您可以添加任意多的配置和口味。

在您设置Debug, Release的菜单中。您可以创建一个新的配置类型。一旦您创建了自己的配置。您可以使用上面的代码:

#if ReleaseConfiguration1
//specifics configuration 1 goes here
#endif
#if ReleaseConfiguration2
//specifics configuration 2 goes here
#endif

最新更新