6

Câu hỏi này là loại hai phần tử. Trong VS2015 dự án MVC của tôi có nhiều cấu hình xây dựng khác nhau, Kiểm tra, UAT, Trực tiếp v.v. Với web.config Tôi chỉ cần nhấp chuột phải vào nó và chọn Thêm Cấu hình Biến đổi để tạo các tệp biến đổi cho mỗi cấu hình xây dựng.Việc chuyển đổi các tệp cấu hình được bao gồm bằng cách sử dụng configSource

Nếu tôi có tệp cấu hình bên ngoài, chẳng hạn như Log4Net.config làm cách nào tôi có thể định cấu hình để có các biến đổi phụ thuộc như web.config? Việc này có được thực hiện thủ công bằng cách chỉnh sửa tệp project.csproj không?

Thứ hai, tôi có một tập tin web.config như sau:

<configuration> 
    <configSections> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, Log4net" /> 
    </configSections> 

    ... 

    <log4net configSource="Log4Net.config" /> 
</configuration> 

Khi tôi xây dựng dự án, web.config sẽ tự động được chuyển thông qua các mục tiêu AfterBuild sau trong file project.csproj:

<Target Name="AfterBuild"> 
    <TransformXml Source="Web.config" 
      Transform="Web.$(Configuration).config" 
      Destination="$(OutputPath)\$(AssemblyName).config" /> 
</Target> 

thế nào có thể Tôi chuyển đổi tệp đính kèm Log4Net.config bằng cách sử dụng cùng một chuyển đổi cấu hình? Tôi nhận ra rằng tôi có thể đặt một số khác TransformXml vào mục tiêu Sau khi xây dựng, nhưng đây có phải là cách chính xác để thực hiện việc chuyển đổi này hay tôi thiếu một cái gì đó?

+0

Tôi gặp vấn đề tương tự. Bạn đã quản lý để giải quyết nó? –

+0

@MatiasCicero Tôi đã giải quyết nó bằng cách sử dụng một TransformXml bổ sung trong mục tiêu AfterBuild. Tôi đã vạch ra nó trong câu trả lời dưới đây. HTH. – MrDeveloper

Trả lời

3

tôi chọn cho giải pháp của việc sử dụng một tập tin cơ sở Log4Net.config, một file Log4Net.XXX.config cho mỗi cấu hình xây dựng và bổ sung TransformXml nhiệm vụ trong AfterBuild mục tiêu:

  • Log4Net.config
  • Log4Net.Debug.config
  • Log4Net.Release.config
  • Log4Net.Test.config
  • Log4Net.UAT.config

File project.csproj bây giờ trông như thế này:

<Content Include="Log4Net.config"> 
    <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
</Content> 
<None Include="Log4Net.Debug.config"> 
    <DependentUpon>Log4Net.config</DependentUpon> 
</None> 
<None Include="Log4Net.Release.config"> 
    <DependentUpon>Log4Net.config</DependentUpon> 
</None> 
<None Include="Log4Net.Test.config"> 
    <DependentUpon>Log4Net.config</DependentUpon> 
</None> 
<None Include="Log4Net.UAT.config"> 
    <DependentUpon>Log4Net.config</DependentUpon> 
</None> 

.... 

<Target Name="AfterBuild"> 
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="$(OutputPath)\$(AssemblyName).config" /> 
    <TransformXml Source="Log4Net.config" Transform="Log4Net.$(Configuration).config" Destination="$(OutputPath)\Log4Net.config" /> 
</Target> 

Và một ví dụ Log4Net.Test.config trông như thế này (tôi đang sử dụng các biến đổi để thay đổi chuỗi kết nối và mức độ khai thác gỗ Log4Net của):

<?xml version="1.0" encoding="utf-8"?> 

<log4net xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <appender> 
     <connectionString 
      value="Data Source=example.com;Initial Catalog=ExampleLogs;User ID=xxx;Password=xxx" 
      xdt:Transform="Replace" /> 
    </appender> 

    <root> 
     <level 
      value="DEBUG" 
      xdt:Transform="Replace" /> 
    </root> 
</log4net> 

Điều này biến đổi tệp Log4Net.config trong đường dẫn đầu ra thành công. Nó sử dụng cách tiếp cận tương tự như việc chuyển đổi các tệp web.config và do đó, có thể dễ dàng hiểu được bởi bất kỳ nhà phát triển nào khác chọn dự án đó.

Trong khi công việc này và đã được sản xuất trong một thời bây giờ, tôi vẫn đang tìm một số xác nhận rằng đây là cách chính xác để thực hiện các biến đổi của các tệp cấu hình được bao gồm.

Các vấn đề liên quan