2008-09-30 38 views
8

Tôi có một hệ thống .Net tương đối lớn bao gồm một số ứng dụng khác nhau. Thay vì có nhiều tệp app.config khác nhau, tôi muốn chia sẻ một tệp cấu hình duy nhất giữa tất cả các ứng dụng.Tôi làm cách nào để chia sẻ cấu hình ứng dụng trong ứng dụng .net?

Tôi cũng muốn có một phiên bản khi phát triển trên máy, một phiên bản dành cho người khác đang phát triển trên máy của họ, một phiên bản cho hệ thống thử nghiệm và một phiên bản cho hệ thống trực tiếp.

Có cách nào dễ dàng để thực hiện việc này không?

+0

Tôi có cùng một câu hỏi nhưng không bao giờ thực sự tìm được giải pháp. Tôi sẽ theo chủ đề này. –

Trả lời

6

Đối với số lượng lớn cấu hình cần thiết cho nhiều ứng dụng, tôi sẽ đặt cấu hình này vào một kho lưu trữ trung tâm, ví dụ: một cơ sở dữ liệu, tệp ở một vị trí chung.

Để sử dụng các phiên bản khác nhau của một tập tin cấu hình cho các môi trường khác nhau, tạo ra một cấu hình xây dựng cho từng môi trường khác nhau và một tập tin cấu hình được đặt tên theo môi trường, ví dụ:

sản xuất production.app.config kiểm tra thử nghiệm .app.config

Sau đó, bạn có thể sử dụng sự kiện dựng trước để sao chép cấu hình đúng trên ứng dụng mặc định.config trong dự án của bạn. Điều này sau đó sẽ được sao chép vào thư mục đầu ra của bạn như bình thường.

Sự kiện dựng trước sẽ trông giống như trên, chỉ cần sử dụng $ (Cấu hình) để lấy tệp thích hợp cho môi trường bạn muốn.

Bạn có thể kết hợp điều này với phần trên để sao chép các tệp cấu hình cụ thể xây dựng tổng thể vào từng dự án.

+2

Kho lưu trữ trung tâm vẫn cần một số thông tin cấu hình cục bộ (ví dụ: ConnectionString hoặc bất kỳ thứ gì được yêu cầu để truy cập vào nó). Ngoài ra, một số thông tin cần được phân chia giữa cục bộ và kho lưu trữ (ví dụ: ghi nhật ký để có thể báo cáo lỗi "sớm"). Tuy nhiên vẫn có thể làm được, nhưng đòi hỏi một số suy nghĩ thêm. –

+0

Tôi cho rằng cấu hình xây dựng sẽ cần phải được thực hiện trong studio trực quan - tôi thấy điều này là ổn, nhưng cần khá nhiều quản lý vì rất dễ dàng vô tình thay đổi cấu hình xây dựng. Câu trả lời tốt mặc dù! –

+0

Nick R - Tôi đã chỉ thực hiện nó trong Visual Studio, nhưng không thấy lý do tại sao MSBuild không thể làm điều đó là tốt. – marcj

2

Bạn có thể sử dụng một sự kiện sau xây dựng (Properties -> Xây dựng sự kiện) vào các dự án "con" của mình để sao chép một tập tin cấu hình từ một dự án tổng thể để những người khác, như thế này:

copy /Y c:\path\to\master\project\app.config $(TargetPath).config 
exit 0 

(Các " thoát 0 "làm dòng cuối cùng ngăn lỗi xây dựng).

Để có tệp cấu hình riêng biệt cho các mục tiêu xây dựng khác nhau ("RELEASE", "DEBUG", v.v.), bạn có thể chỉnh sửa tệp .csproj (hoặc .vbproj) trong NOTEPAD.EXE để thêm thẻ AppConfig cho mỗi nhóm đối tượng, như thế này:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <DebugSymbols>true</DebugSymbols> 
    <DebugType>full</DebugType> 
    <Optimize>false</Optimize> 
    <OutputPath>.\bin\Debug\</OutputPath> 
    <DefineConstants>DEBUG;TRACE</DefineConstants> 
    <AppConfig>debug.app.config</AppConfig> 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <DebugSymbols>true</DebugSymbols> 
    <DebugType>full</DebugType> 
    <Optimize>false</Optimize> 
    <OutputPath>.\bin\Devel\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <AppConfig>release.app.config</AppConfig> 
    </PropertyGroup> 

Thông báo mới < AppConfig> thẻ hiện diện trong mỗi nhóm.

2

Thay vì thêm <add> yếu tố để phần <appSettings> lại tập tin cấu hình của bạn, bạn có thể thêm một thuộc tính file= tới phần tử <appSettings> nói với nó để tải dữ liệu từ một tập tin khác nhau. Sau đó, bạn có thể giữ cài đặt chung của mình trong tệp phổ biến đó.

Xem appSettings Element (General Settings Schema) trong Thư viện MSDN.

+0

Tôi làm điều đó. Tôi chỉ thất vọng rằng tập tin Settings.settings (tôi thích nó vì nó mạnh mẽ các loại cài đặt và cho phép dễ dàng nâng cấp cấu hình) không cung cấp tính năng này. –

0

Bạn cũng có thể đặt các cài đặt cấu hình vào machine.config để chia sẻ chúng giữa nhiều ứng dụng. Điều này làm cho việc triển khai có nhiều vấn đề hơn.

1

Có thể sử dụng NTFS symbolic links để chia sẻ tệp .config .NET. Tôi đã nhìn thấy điều này được sử dụng thành công trong một giải pháp bao gồm một ứng dụng ASP.NET, ứng dụng giao diện điều khiển, và nhiều hơn nữa.

+0

Tôi thích điều này, nhưng nó thêm một bước triển khai khác. – ProfK

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