【发布时间】:2014-07-22 17:58:14
【问题描述】:
我有一个 C# 应用程序,它针对应用程序的不同“风格”提供了一些不同的构建配置。我希望每个配置都有 ClickOnce 发布选项,而不是每次我进行构建和发布时都必须设置它们。发布选项似乎适用于所有配置。有没有办法使发布选项特定于每个配置?
【问题讨论】:
标签: c# visual-studio clickonce
我有一个 C# 应用程序,它针对应用程序的不同“风格”提供了一些不同的构建配置。我希望每个配置都有 ClickOnce 发布选项,而不是每次我进行构建和发布时都必须设置它们。发布选项似乎适用于所有配置。有没有办法使发布选项特定于每个配置?
【问题讨论】:
标签: c# visual-studio 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 都会覆盖您的条件。
但是,我从 found 开始,使用 Choose element 您可以实现相同的行为无需 Visual Studio 搞砸。不过,您仍然需要手动编辑 .csproj 文件。
简而言之,不要将 Conditional 直接应用于第一个属性组中的 PublishUrl 标记。它将被 Visual Studio 覆盖。相反,稍后在项目文件中定义另一个。在构建或发布时,第二个值将取代第一个值,但 IDE 将不理会它。这是您可以使用“选择”组设置条件的第二个。
在第一个属性组下方,添加如下部分:
<Choose>
<When Condition=" '$(Configuration)' == 'Debug' ">
<PropertyGroup>
<PublishUrl>your\debug\publish\location</PublishUrl>
</PropertyGroup>
</When>
<When Condition=" '$(Configuration)' == 'Release' ">
<PropertyGroup>
<PublishUrl>your\release\publish\location</PublishUrl>
</PropertyGroup>
</When>
</Choose>
当然,您可以根据需要添加任意数量的配置和风格。
【讨论】:
在您设置“调试”的菜单中,“发布”。您可以创建一种新的配置类型。一旦您创建了自己的配置。可以使用上面的代码:
#if ReleaseConfiguration1
//specifics configuration 1 goes here
#endif
#if ReleaseConfiguration2
//specifics configuration 2 goes here
#endif
【讨论】: