Dot-Net

如何根據建構配置有條件地部署 app.config?

  • December 8, 2008

我有三個自定義建構配置 { Dev、Qs、Prd }。所以,我有三個應用程序配置 { Dev.config、Qs.config、Prd.config }。我知道如何編輯 .csproj 文件以根據目前的建構配置輸出正確的文件。

<Target Name="AfterBuild">
  <Delete Files="$(TargetDir)$(TargetFileName).config" />
  <Copy SourceFiles="$(ProjectDir)$(Configuration).config" DestinationFiles="$(TargetDir)$(TargetFileName).config" />
</Target>

我的問題是,我需要有六個建構配置 { Dev、Qs、Prd} x { Debug、Release }。我需要支持每個環境的調試和發佈設置(優化、pdb 等)。但是,應用程序配置值在調試/發布之間不會改變。

如何使建構腳本盡可能通用並僅使用三個應用程序配置?我不想硬編碼太多的條件字元串。

類似的東西

<PropertyGroup Condition="'$(Configuration)'=='Dev_Debug' OR '$(Configuration)'=='Dev_Release'" >
   <CfgFileName>Dev</CfgFileName>
</PropertyGroup>
<!-- similar for Qs & Prd -->
<Target ...>...$(CfgFileName).config...

我們使用 csproj 文件中的選擇元素修復了這個問題。我們設置了幾種不同的配置,所以我們所做的就是將此塊放入您的 proj 文件中,您可以使用 VS 的配置來幫助您。我確實想支持 Rob 的建議以移動傳遞的 app.config。一段時間以來,我一直在朝著這個方向前進。

 <Choose>
<When Condition=" '$(Configuration)' == 'Debug' ">
 <ItemGroup>
   <None Include="App.config" />
   <None Include="Release\App.config" />
 </ItemGroup>
</When>
<Otherwise>
 <ItemGroup>
   <None Include="Release\App.config">
     <Link>App.config</Link>
   </None>
 </ItemGroup>
</Otherwise>

引用自:https://stackoverflow.com/questions/350377