Web.config-style transforms for App.config files for C# Console apps?

烂漫一生 提交于 2019-12-05 07:52:38
Neelima Reddy

To add multiple app.configs to a console application:

I am using visual studio 2013. In this version we don't have a config transformation. Please install the configuration transformation extension.

First add environments in solution configuration. Right click on the App.config file. Click on the Add config Transform. It adds as many as solution configurations.

In App.config:

<appSettings>
    <add key="key" value="some value" />   
</appSettings>

Copy this code in 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>

Finally, build the solution.

Simplest solution I've found for this is using Slowcheetah; they have tutorials on their website for using MSBuild, etc, I believe for switching properly after pushing from Dev to QA, etc.

http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5

It just works for me :)

I was looking for an easy solution for Azure WebJobs project to transform App.config during build that works with Visual Studio and MSBuild on the server.

For Azure WebJobs projects, following addition to .csproj helped:

<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>

Works with build, no extensions required and App.config is not overwritten in place. Based on Dhia Louhichi's answer.

I suggest this blog post:

http://blogs.msdn.com/b/webdev/archive/2010/11/17/xdt-web-config-transforms-in-non-web-projects.aspx

It explains how to use the xdt transformation also with WPF projects configuration files. I followed these instructions for some console applications and it works very well. I'm using VS2012 Express, but I suppose it will work also for VS2010.

Recently I set up a build server and this is what I ended up using:

<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>

Explanation:

  1. Import the TransformXml Task through UsingTask (Make sure you set the right Visual studio task path)
  2. Display a custom message. (You can set the Importantance to High, normal, low)
  3. Call the TransformXml task and create a temporary file.
  4. Copy the temporary file to the main one. You need OverwriteReadOnlyFiles as TFS will probably lock it.
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!