主控台應用程式的組態置換

     目前有一Console應用程式在執行一些背景工作,在部署上切換測試及正式環境是件很麻煩的事,因連線及AppSetting會因不同主機更換,之前為了省工,還寫了動態載入外部組態的程式來達到目的....。今天剛好不小心瞄一篇相關的文章,可以在建置就切換config,才發現我作了一堆白工..=.=。以下為懺悔用的筆記文.....。

自動切換App.config

在App.config 新增Stage 設定,值=Debug
image

新增App.Release.config及App.Debug.config
image

在App.Release.config 新增Stage 設定,值=Release
image

Debug.config 保持空值,此檔案為必要檔案,因待會的轉換時以檢查此檔案是否存在。

在專案檔.csproj 加入如下的建置設定

1.PropertyGroup
<PropertyGroup>
  <ProjectConfigFileName>App.config</ProjectConfigFileName>
</PropertyGroup>
2.ItemGroup
<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>
3.Import
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets" />
<Target Name="AfterBuild">
  <TransformXml Source="@(AppConfigWithTargetPath)" Transform="$(ProjectConfigTransformFileName)" 
                Destination="@(AppConfigWithTargetPath->'$(OutDir)%(TargetPath)')" />
</Target>

參照如下圖
image

儲存後,此時檔案結構會變成有階層順序
image

測試建置

切換到Release建置後,此時Stage 的值已更改為Release
image

同場加映切換連線字串為外部檔案


在App.config 新增connectionStrings設定
image

新增Connection.config,如下
image

Connection.config設定輸出屬性為Copy always
image

在App.Release.config 將connectionStrings指向Connection.config
image

測試建置

切換到Release建置後,此時connection 已指向外部檔案
image

原始檔  https://github.com/kimx/AppConfigTransformLab


參考文章

http://demo.tc/post/775
https://msdn.microsoft.com/en-us/library/ms254494(v=vs.110).aspx

這個網誌中的熱門文章

[.NET Core] 將專案發行至IIS

[TFS] 分支與合併