.exe.configをDebugとReleaseで切り替える Visual Studio 2015編
ひさびさ.NET
コンソールアプリケーションとかWindowsアプリケーションとかの場合ね。
Web.configは勝手にやってくれるのになぜ.exe.configはやってくれないのか
なお、.exe.configからの値の取得はWeb.configの時と一緒でございます。
1.おもむろにApp.config/App.Debug.config/App.Release.configをプロジェクトディレクトリ直下に作ります。
中身はこんな感じ
App.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="foo" value="default" /> </appSettings> </configuration>
App.Debug.config - 特に書くことない
<?xml version="1.0" encoding="utf-8"?> <configuration> </configuration>
App.Release.config - Web.Release.configと同じ書き方でおk
<?xml version="1.0" encoding="utf-8"?> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <appSettings> <add key="foo" value="release" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/> </appSettings> </configuration>
2..csproj編集
ソリューションエクスプローラーからプロジェクト右クリック→プロジェクトのアンロード
もっかい右クリック→編集XXXX.csproj
まずItemGroup
<None Include="App.config" /> <None Include="App.Debug.config" /> <None Include="App.Release.config" />
を
<ItemGroup> <None Include="App.config" /> <None Include="App.Debug.config"> <DependentUpon>App.config</DependentUpon> </None> <None Include="App.Release.config"> <DependentUpon>App.config</DependentUpon> </None> </ItemGroup>
に書き換え。
で、AfterCompileとAfterPublish追加。
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" /> <Target Name="AfterCompile" Condition="Exists('App.$(Configuration).config')"> <TransformXml Source="App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="App.$(Configuration).config" /> <ItemGroup> <AppConfigWithTargetPath Remove="App.config" /> <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config"> <TargetPath>$(TargetFileName).config</TargetPath> </AppConfigWithTargetPath> </ItemGroup> </Target> <Target Name="AfterPublish"> <PropertyGroup> <DeployedConfig>$(_DeploymentApplicationDir)$(TargetName)$(TargetExt).config$(_DeploymentFileMappingExtension)</DeployedConfig> </PropertyGroup> <Copy Condition="Exists('$(DeployedConfig)')" SourceFiles="$(IntermediateOutputPath)$(TargetFileName).config" DestinationFiles="$(DeployedConfig)" /> </Target>
以上。
長々書いたけど、これ使ったら一発な模様。
プレビューもできるらしい。
visualstudiogallery.msdn.microsoft.com