Tôi đã thử một vài giải pháp và đây là cách đơn giản nhất mà cá nhân tôi tìm thấy.
Dan đã chỉ ra trong các ý kiến rằng bài viết gốc thuộc về Oleg Sych - cảm ơn, Oleg!
Dưới đây là hướng dẫn:
1. Thêm một tệp XML cho mỗi cấu hình cho dự án.
Thông thường, bạn sẽ có Debug
và Release
cấu hình để đặt tên cho tệp của bạn App.Debug.config
và App.Release.config
. Trong dự án của tôi, tôi đã tạo một cấu hình cho từng loại môi trường, vì vậy bạn có thể muốn thử nghiệm điều đó.
2. Dỡ bỏ dự án và mở tệp .csproj để chỉnh sửa
Visual Studio cho phép bạn chỉnh sửa các tệp .csproj ngay trong trình soạn thảo, bạn chỉ cần dỡ dự án trước. Sau đó nhấp chuột phải vào nó và chọn Chỉnh sửa <ProjectName> .csproj .
3. Liên kết các tệp. *. Cấu hình thành App.config chính
Tìm phần tập tin dự án có chứa tất cả App.config
và App.*.config
tài liệu tham khảo. Bạn sẽ nhận thấy các hành động xây dựng của họ được đặt thành None
:
<None Include="App.config" />
<None Include="App.Debug.config" />
<None Include="App.Release.config" />
Đầu tiên, thiết lập hành động xây dựng cho tất cả chúng Content
.
Tiếp theo, làm cho tất cả các tệp cụ thể cấu hình phụ thuộc vào chính App.config
để Visual Studio nhóm chúng giống như các tệp thiết kế và mã phía sau.
Thay thế XML ở trên bằng một cái bên dưới:
<Content Include="App.config" />
<Content Include="App.Debug.config" >
<DependentUpon>App.config</DependentUpon>
</Content>
<Content Include="App.Release.config" >
<DependentUpon>App.config</DependentUpon>
</Content>
4. Kích hoạt ma thuật biến đổi (chỉ cần thiết cho các phiên bản Visual Studio trước VS2017 )
Vào cuối tập tin sau
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
và trước trận chung kết
</Project>
chèn XML sau:
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="CoreCompile" Condition="exists('app.$(Configuration).config')">
<!-- Generate transformed app config in the intermediate directory -->
<TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" />
<!-- Force build process to use the transformed configuration file from now on. -->
<ItemGroup>
<AppConfigWithTargetPath Remove="app.config" />
<AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
</Target>
Bây giờ bạn có thể tải lại dự án, xây dựng nó và tận hưởng các App.config
biến đổi!
FYI
Đảm bảo rằng các App.*.config
tệp của bạn có thiết lập đúng như thế này:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--magic transformations here-->
</configuration>