2009-05-04 38 views
7

Tôi có một giải pháp bao gồm cả ứng dụng dịch vụ web và Windows NT. Đây là tất nhiên hai dự án khác nhau nhưng trong cùng một giải pháp. Tuy nhiên, họ chia sẻ rất nhiều cấu hình tương tự.Các tệp cấu hình được chia sẻ trong .NET

Hiện tại tôi có cùng giá trị trong cả tệp web.config và tệp app.config. Điều này bắt đầu lộn xộn và tôi muốn có một tệp cấu hình được chia sẻ cho cả hai ứng dụng trong giải pháp.

  • Có một vấn đề đối với các ứng dụng web nếu cấu hình không phải là ở cấp thư mục gốc của ứng dụng web? Có giới hạn ở đây không?
  • Tôi có bị mất bộ nhớ đệm và tự động tái chế web ứng dụng nếu tôi không sử dụng web.config
  • Bạn có thường chia sẻ cấu hình như mô tả không?

Trả lời

9

Vâng, bạn có thể "externalize" một số phần nhất định của cấu hình thành các tệp .config riêng biệt và sử dụng chúng từ cả hai nơi.

Ví dụ: bạn có thể ra bên ngoài thiết lập chuỗi kết nối của bạn như vậy:

<connectionStrings configSource="connectionStrings.config" /> 

và sau đó có "connectionString.config" tập tin như thế này:

<?xml version="1.0" encoding="utf-8"?> 
<connectionStrings> 
    <add name="ConfigurationDatabase" 
     connectionString="server=.;Integrated Security=true;database=test"/> 
    <add name="TestDatabase" 
     connectionString="server=TEST;Integrated Security=true;database=test"/> 
</connectionStrings> 

Về cơ bản, bất kỳ ConfigurationSection có một "configSource" thiết lập như vậy, mà cho phép bạn chỉ định tệp bên ngoài để sử dụng.

Bằng cách đó, bạn có thể chia sẻ các phần phổ biến của hai tệp cấu hình.

Marc

+0

Thuộc tính configSource không cho phép bạn đặt ".." hoặc "~ /" vào trong đó và nói "Nó phải tham chiếu đến một tệp trong cùng thư mục hoặc trong thư mục con dưới dạng tệp cấu hình". Cho điều này, làm thế nào hai dự án có thể chia sẻ một tập tin bên ngoài nếu không có thể đạt đến một cấp độ thư mục cao hơn chính nó? –

+0

@James trong Indy: bạn có thể sử dụng chức năng cấp hệ thống tệp NTFS, như liên kết cứng và mềm, có thể tạo tệp xuất hiện trong thư mục, mặc dù nó không thực sự ở đó ... (chỉ là liên kết/trỏ đến tệp thực tế). Google cho "liên kết cứng NTFS" hoặc "điểm kết nối NTFS" –

2

Bạn vẫn sẽ cần một web .config như có những yếu tố của cấu hình đó là đặc trưng web đó sẽ không được trong app.config của dịch vụ. Là Marc says, việc sử dụng thuộc tính ConfigSource sẽ cho phép bạn chia sẻ các phần tử phổ biến.

Lưu ý rằng phần tử appSettings có sự khác biệt nhỏ: thuộc tính Tệp.

Chỉ định đường dẫn tương đối vào tệp bên ngoài chứa cài đặt cấu hình ứng dụng tùy chỉnh. Tệp được chỉ định chứa cùng một loại cài đặt được chỉ định trong appSettings thêm, xóa và loại bỏ các thuộc tính và sử dụng cùng một định dạng cặp khóa/giá trị giống như các phần tử đó.

này hoạt động khác với các thuộc tính ConfigSource, bởi vì bạn không cần phải thay thế toàn bộ phần với các tập tin bên ngoài, nó chỉ có thể chứa các thành phần mà bạn muốn có trong Ngoài ra, hoặc để ghi đè lên các giá trị:

Bạn có thể sử dụng thuộc tính tập tin để xác định một tập tin cấu hình mà cung cấp thêm thiết lập hoặc ghi đè các thiết lập được quy định trong các yếu tố appSettings.

Nếu bạn đang sử dụng ConfigSource để chia sẻ các yếu tố khác, sau đó bạn vẫn sẽ phải khởi động lại tự động của các ứng dụng khi giá trị được thay đổi - những lưu ý về các restartOnExternalChanges thuộc tính nên bỏ qua cho các ứng dụng ASP.NET, tuy nhiên sử dụng File thuộc tính sẽ có nghĩa là các thay đổi sẽ không gây ra khởi động lại.

Nội dung của các tệp bên ngoài sẽ vẫn được lưu vào bộ nhớ cache, vì vậy không nên bị ảnh hưởng bởi sự pha trộn.

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