C#控制台应用程序的App.config文件是否支持类似于Web.config的转换?

7

我的团队喜欢使用发布配置文件。我们有许多测试环境进行工作,使用Web.config转换,我们可以在每个环境中替换机器名称、配置设置等,这使得我们的构建/部署/测试过程更加容易。

例如:

Web.config
    Web.dev.config
    Web.int.config
    Web.prod.config

然而,我们有许多测试应用程序可以用作命令行应用程序来调用我们的Web服务。我们希望能够对这些配置文件进行相同类型的转换,以便在拾取构建版本时减少手动编辑配置文件所需的工作量。

基本上,我们想要实现以下目标:

App.config
    App.dev.config
    App.int.config
    App.prod.config

我的理解是,这些配置转换与我们Web项目中相应的发布配置文件相关联。
Properties
    PublishProfiles
        dev.pubxml
        int.pubxml
        prod.pubxml

我尝试将类似的文件添加到我们的控制台应用程序项目中,但我怀疑是网络发布MSBuild目标实际上利用了它们。

有没有办法特别针对构建的这一部分进行挂接,以便我们可以转换非Web配置文件?

5个回答

9
为控制台应用程序添加多个app.configs:
我使用的是Visual Studio 2013。在这个版本中,我们没有配置转换。请安装配置转换扩展
首先,在解决方案配置中添加环境。右键单击App.config文件。单击“添加配置转换”。它会添加与解决方案配置数目相同的配置。
App.config中:
<appSettings>
    <add key="key" value="some value" />   
</appSettings>

请将以下代码复制到 App.Release.Config 中:

<appSettings>
    <add key="same key which you have given in app.config" value="some new value" xdt:Transform="Replace" xdt:Locator="Match(key)" />   
 </appSettings>

最后,构建解决方案。

6
我正在寻找一种简单的解决方案,用于在 Visual Studio 和 MSBuild 服务器上工作的 Azure WebJobs 项目中,在构建期间转换 App.config。对于 Azure WebJobs 项目,以下添加到 .csproj 可以帮助:
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterCompile" Condition="Exists('App.$(configuration).config')">
    <Message Text="Transforming config files..." Importance="high" />
    <TransformXml Source="App.config" Transform="App.$(Configuration).config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" />
    <PropertyGroup>
      <AppConfig>$(IntermediateOutputPath)$(TargetFileName).config</AppConfig>
    </PropertyGroup>
    <ItemGroup>
        <AppConfigWithTargetPath Remove="App.config" />
        <AppConfigWithTargetPath Include="$(AppConfig)" Condition="'$(AppConfig)'!=''">
            <TargetPath>$(TargetFileName).config</TargetPath>
        </AppConfigWithTargetPath>
    </ItemGroup>
</Target>

适用于构建,不需要扩展,并且App.config不会被覆盖。基于Dhia Louhichi的回答


3

Web.config 的转换不是已经集成在 VS2012 中了吗?我想知道为什么你要使用第三方插件。 - FeliceM
3
对于 web.config 是需要的,但是对于 App.config 和我偶尔使用的 VS2010 则不需要。 - brenton

1

0

最近我搭建了一台构建服务器,这是我最终使用的配置:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <Target Name="BeforeBuild" Condition="">
    <Message Text="Transforming Configs files..." Importance="high" />
    <TransformXml Source="App_Data\config\appSettings.config" Transform="App_Data\config\appSettings.$(Configuration).config" Destination="App_Data\config\appSettings_temp.config" />
    <Copy SourceFiles="App_Data\config\appSettings_temp.config" DestinationFiles="App_Data\config\appSettings.config" OverwriteReadOnlyFiles="True" />
    <Delete Files="App_Data\config\\appSettings_temp.config" />
  </Target>

说明:

  1. 通过UsingTask导入TransformXml任务(确保您设置了正确的Visual Studio任务路径)
  2. 显示自定义消息。(您可以将Importantance设置为高、正常、低)
  3. 调用TransformXml任务并创建临时文件。
  4. 将临时文件复制到主文件中。您需要将OverwriteReadOnlyFiles设置为TFS可能会锁定它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接