我有一个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元素可以实现相同的行为简而言之,不要将条件直接应用于第一个属性组中的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