2011-06-25 46 views
7

Giả sử chúng ta có Assembly1 và Assembly2.Lặp lại cấu hình trên các hội đồng tham chiếu

Assembly2 là thư viện lớp C# được Assembly1 sử dụng.

Tham khảo web và dịch vụ được định cấu hình và lưu trữ trong Asembly2/app.Config.

Hơn nữa, chuỗi kết nối EF (s) nằm trong Assembly2/app.Config.

Khi tôi sử dụng Assembly2 trong Assembly1, tệp cấu hình Assembly2 không được sử dụng. Trong thực tế, trong kịch bản đó, chỉ cấu hình Assembly1 mới có thể truy cập thông qua các phương tiện mặc định.

Do đó, tôi phải sao chép nội dung cấu hình Assembly2 vào cấu hình Assembly1.

Điều này đã làm việc cho tôi đối với nhiều dự án.

Có cách nào khác không? Một cách tốt hơn?

Có vẻ như sai khi lặp lại dữ liệu cấu hình.

Bạn có đề xuất hoặc kỹ thuật hoạt động không?

Cảm ơn bạn.

Trả lời

4

Bạn cần áp dụng các thay đổi đối với tệp cấu hình của cụm exe điểm nhập. Các tệp cấu hình của thư viện lớp (dll) không bao giờ được sử dụng. Chúng được thực hiện bởi Visual Studio, do đó bạn có thể dễ dàng sao chép các thiết lập vào tập tin cấu hình exe nếu cần thiết.

Dưới đây là ví dụ về tệp cấu hình cho lắp ráp exe có cả hai, cài đặt từ thư viện lớp ClassLibrary1 và cài đặt từ cấu hình exe MainAssembly. Bạn có thể thấy rằng cả hai chuỗi kết nối đều nằm trong một cài đặt connectionStrings. Tuy nhiên, nếu bạn cần đặt các cài đặt khác, bên cạnh chuỗi kết nối, bạn cần thêm phần bổ sung.

Nếu bạn đã sử dụng kỹ thuật này, đây là cách chính xác. Kỹ thuật này là linh hoạt. Ví dụ nếu bạn có nhiều dự án có cùng chuỗi kết nối trên một hộp, bạn có thể chỉ định chuỗi kết nối trong tệp machine.config. Bạn cũng có thể ghi đè cài đặt trong một số dự án nếu cần.

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
    <sectionGroup name="applicationSettings" 
        type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 

     <!--This section declaratrion pasted here from dll conifg file --> 
     <section name="ClassLibrary1.Properties.Settings" 
       type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
       requirePermission="false" /> 

     <!--This section declaratrion was here in the first place --> 
     <section name="MainAssembly.Properties.Settings" 
       type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
       requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 
    <connectionStrings> 

    <!--This connection string was here in the first place --> 
    <add name="MainAssembly.Properties.Settings.MainAssemblyConnectionString" 
     connectionString="MainConnectionStringValue" /> 

    <!--This connection string pasted here from dll config file --> 
    <add name="ClassLibrary1.Properties.Settings.LibraryConnectionString" 
     connectionString="LibraryConnectionStringValue" 
     providerName="" /> 
    </connectionStrings> 
    <applicationSettings> 

    <!--This settings section pasted here from dll config file --> 
    <ClassLibrary1.Properties.Settings> 
     <setting name="LibrarySetting" 
       serializeAs="String"> 
     <value>LibrarySettingValue</value> 
     </setting> 
    </ClassLibrary1.Properties.Settings> 

    <!--This strings section was here in the first place --> 
    <MainAssembly.Properties.Settings> 
     <setting name="MainAssemblySetting" 
       serializeAs="String"> 
     <value>MainSettingValue</value> 
     </setting> 
    </MainAssembly.Properties.Settings> 
    </applicationSettings> 
</configuration> 
2

Một DLL (hoặc một hội đồng được tham chiếu khác) không có nghĩa là mang theo app.config riêng của nó, mà đúng hơn là mọi thứ được cấu hình bởi người gọi. Vì vậy, tất cả mọi thứ nên đi vào app.config của exe.

Hãy xem ví dụ thư viện truy cập dữ liệu được chia sẻ cần chuỗi kết nối với cơ sở dữ liệu. Thư viện có thể sử dụng từ nhiều ứng dụng khác nhau với các yêu cầu kết nối khác nhau. Việc có chuỗi kết nối được gắn chặt với thư viện được chia sẻ sẽ không hoạt động, nó phải được thực hiện tại máy khách bằng thư viện.

Có thể đặt các cài đặt trên toàn hệ thống ảnh hưởng đến tất cả các ứng dụng chạy trên máy trong tệp machine.config, nhưng sử dụng thận trọng vì nó sẽ ảnh hưởng đến tất cả ứng dụng trên máy.

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