2008-09-18 39 views
19

Giả sử một ứng dụng tổng hợp lớn được xây dựng trên một số thành phần nền tảng được đóng gói trong các cụm của riêng chúng: (đọc cơ sở dữ liệu, trình xử lý giao thức, v.v.). Đối với một số triển khai, điều này có thể bao gồm hơn 20 hội đồng. Mỗi hội đồng này có thông tin cài đặt hoặc cấu hình. Nhóm của chúng tôi có xu hướng thích trình chỉnh sửa cài đặt VS (và mã dễ sử dụng mà nó tạo ra!) Và ứng dụng so với phân biệt người dùng đáp ứng hầu hết nhu cầu của chúng tôi.Làm thế nào để bạn quản lý các tệp ứng dụng .NET.config cho các ứng dụng lớn?

NHƯNG ....

Nó là rất tẻ nhạt để sao chép & dán các phần cấu hình nhiều vào .xml ứng dụng của chúng tôi. Hơn nữa, đối với các thành phần được chia sẻ có xu hướng có cấu hình tương tự trên các ứng dụng, điều này có nghĩa là chúng ta cần phải duy trì các thiết lập trùng lặp trong nhiều tệp .config.

EntLib của Microsoft giải quyết vấn đề này bằng một công cụ bên ngoài để tạo tệp .config của quái vật, nhưng điều này cũng cảm thấy klunky.

Bạn sử dụng kỹ thuật nào để quản lý tệp .config có kích thước lớn với các phần từ nhiều bộ chia sẻ được chia sẻ? Một số loại cơ chế bao gồm? Trình đọc cấu hình tùy chỉnh?

followup:

Will answer là chính xác những gì tôi đã nhận được ở, và trông thanh lịch cho bộ phận cặp khóa/giá trị căn hộ. Có cách nào để kết hợp phương pháp này với custom configuration sections không?

Cũng xin cảm ơn các đề xuất về quản lý các cấu hình khác nhau cho các mục tiêu xây dựng khác nhau. Điều đó cũng khá hữu ích.

Dave

Trả lời

20

Bạn sử dụng một tệp cấu hình chính trỏ đến các tệp cấu hình khác. Here's an example of how to do this.


Trong trường hợp thối liên kết, những gì bạn cần làm là xác định configSource cho một phần cấu hình cụ thể. Điều này cho phép bạn xác định phần cụ thể đó trong một tệp riêng biệt.

<pages configSource="pages.config"/> 

trong đó hàm ý rằng có một tập tin gọi là "pages.config" trong cùng thư mục chứa toàn bộ cây <pages /> nút.

1

Chúng tôi đã tạo một lớp AssemblySettingsConfig hoạt động như ConfigurationManager, nhưng tải một .config cho từng assembly riêng lẻ. Vì vậy, các ứng dụng có một .config, và bất kỳ DLL nó tham chiếu có các tập tin .config riêng của họ. Đã làm việc tốt cho đến nay.

9

Phương pháp ưa thích của tôi là sử dụng MSBuild, nếu bạn nhấp chuột phải vào một dự án và nhấp vào 'dỡ' một tùy chọn menu mới sẽ bật lên có nội dung 'chỉnh sửa'. Chọn nó và nó sẽ mở tập tin dự án để bạn có thể chỉnh sửa nó, cuộn xuống cho đến khi bạn tìm thấy phần bình luận được gọi là "AfterBuild".

Sau đó bạn có thể thêm một cái gì đó như:

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

này sẽ thay thế các cấu hình ứng dụng với một tên [Release | gỡ lỗi] app.exe.config. Vì vậy, bạn có thể duy trì các cấu hình riêng biệt tùy thuộc vào cách dự án được xây dựng.

Nhưng một lựa chọn nhanh chóng và dơ bẩn (nếu bạn không muốn chơi với msbuild) là chỉ cần duy trì tập tin cấu hình riêng biệt và sau đó xác định cái nào bạn muốn bao gồm, như thế này:

<appSettings configSource="Config\appSettingsDebug.config"/> 
<roleManager configSource="Config\roleManagerDebug.config"/> 

Và nếu bạn đang làm một ứng dụng asp.net, microsoft cung cấp một tiện ích tuyệt vời được gọi là "Dự án triển khai web" cho phép bạn quản lý tất cả điều này dễ dàng, click here

+0

Đối với những người sử dụng ClickOnce: Theo kinh nghiệm của tôi, giải pháp này (trong khi là một giải pháp tốt) không hoạt động tốt cùng với ClickOnce. – stakx

2

Thiết lập cấu hình xây dựng cho mỗi môi trường triển khai/thử nghiệm của bạn và sử dụng các tệp cấu hình riêng biệt dựa trên mỗi cấu hình xây dựng.

ScottGu có a nice post về điều này và nó hoạt động tuyệt vời. Cách duy nhất mà chúng ta có là chúng ta cần phải chắc chắn rằng các file config (web.config) được kiểm tra để chỉnh sửa từ TFS trước mỗi build để nó có thể được sao chép lại.

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