2009-02-26 37 views
25

Con đường tôi đang xử lý này là do có nhiều file cấu hình như:Làm thế nào để bạn xử lý nhiều tệp web.config cho nhiều môi trường?

web.config 
web.Prod.config 
web.QA.config 
web.Dev.config 

Khi dự án được triển khai tới các môi trường khác nhau tôi chỉ đổi tên các tập tin tương ứng với các thiết lập chính xác.

Bất kỳ ai có đề xuất về cách xử lý vấn đề này tốt hơn?

EDIT: Dưới đây là một số trong những điều mà thay đổi trong mỗi cấu hình:

  • WCF Khách hàng Endpoint url và an ninh
  • Tuỳ chỉnh cơ sở dữ liệu configs
  • phiên chuỗi kết nối
  • thiết lập log4net
+0

Đó là cách tôi làm, ngoại trừ web.config và web-dev.config đều giống nhau. – tvanfosson

Trả lời

17

Scott Gu đã có một article về vấn đề này một lần. Giải pháp mà ông trình bày là sử dụng một sự kiện Pre-build để sao chép đúng cấu hình vào vị trí tùy thuộc vào cấu hình xây dựng đã chọn.

Tôi cũng nhận thấy rằng đã có question tương tự ở đây trên SO.

0

Nó thực sự phụ thuộc vào sự khác biệt giữa môi trường Đó là nguyên nhân khiến bạn sử dụng các tệp web.config khác nhau. Bạn có thể cung cấp thêm thông tin về lý do tại sao mỗi môi trường hiện đang cần một môi trường khác?

+0

Tôi tưởng tượng mỗi môi trường sẽ cần kết nối cơ sở dữ liệu chuyên biệt, cấu hình dịch vụ nhà nước và các mục có thể cấu hình khác phụ thuộc rất nhiều vào môi trường bạn đang ở. –

0

Cách chúng tôi đã làm việc đó là để ghi đè lên AppSettings phần:

<appSettings file="../AppSettingsOverride.config"> 
    <add key="key" value="override" />  
    ... 
</appSettings> 

chỉ này hoạt động cho phần appSettings và như vậy là chỉ hữu ích cho một mức độ. Tôi sẽ rất quan tâm đến các giải pháp mạnh mẽ hơn.

Sửa Dưới

Chỉ cần xem này: http://channel9.msdn.com/shows/10-4/10-4-Episode-10-Making-Web-Deployment-Easier/

VS2010 có biến đổi cấu hình mà nhìn đẹp tuyệt vời, nên làm nhiều cấu hình một làn gió hoàn chỉnh.

+0

Điều này thật thú vị - bạn có quản lý từng tệp AppSettingsOverride.config của mình không kiểm soát nguồn quá? Sự khác biệt giữa việc sử dụng phương pháp của bạn và sử dụng các tệp web.config riêng biệt là gì? –

+0

Những lợi thế lớn nhất là mỗi nhà phát triển có thể có cài đặt ghi đè của riêng mình. Có gì trong web.config trong điều khiển nguồn là những gì chúng ta muốn trên môi trường triển khai chính và chúng tôi đã ghi đè lên các máy chủ thử nghiệm và dev của chúng tôi. Tôi có thể kết hợp điều này với những gì đã được nói cho hiệu quả tốt nhất. –

1

Trong Visual Studio, tôi tạo các sự kiện xây dựng xcopy và lưu tất cả các tệp cấu hình vào thư mục/config. Bạn chỉ cần một sự kiện cho tất cả các cấu hình nếu bạn đặt tên tệp của mình sau cấu hình xây dựng: nghĩa là ghi đè lên web.config bằng /config/web.$(Configuration).config

0

Chúng tôi có một vài cách giải quyết (không phải tất cả đều là được thực hiện với web.config nhưng ý tưởng tương tự)

  1. Chúng tôi bao gồm nhiều tệp cấu hình trong triển khai đóng gói. Trong khi cài đặt, chúng tôi chỉ định môi trường mà chúng tôi đang cài đặt.
  2. Di chuyển tất cả cài đặt môi trường cụ thể đến máy chủ Cơ sở dữ liệu cho môi trường đó. WebServer cung cấp môi trường của nó khi yêu cầu tên máy chủ
  3. Cung cấp nhiều cài đặt (1 cho mỗi môi trường) và sử dụng yêu cầu mã các cài đặt khác nhau.
  4. Sự kết hợp của 2 và 3 (Override một phần của các thiết lập dựa trên môi trường - cho tên máy chủ ví dụ ứng dụng)
0

Thông qua hầu hết các phần mềm quản lý phiên bản khác nhau (subversion, git, v.v.), bạn có thể bỏ qua các tệp cụ thể.

Như vậy, trong lật đổ, tôi muốn có:

configure.template.php - Tập tin này được phiên bản và chứa dữ liệu cấu hình templated, chẳng hạn như configure.php trống DSN của - Tập tin này được bỏ qua, do đó thay đổi nó không được theo dõi.

Trong lật đổ, cách thực hiện việc này là:

svn pe svn: ignore. Nó sẽ mở trình soạn thảo của bạn, sau đó bạn nhập configure.php

Lưu, thoát, kiểm tra các thay đổi của bạn và bạn đã sẵn sàng.

1

Cách yêu thích của tôi để giải quyết vấn đề này là với thuộc tính configSource. Phải thừa nhận rằng tôi chỉ sử dụng điều này trên một phần tử (<connectionStrings>) nhưng nó cung cấp một cách dễ dàng để trao đổi vào và ra các phân đoạn khác nhau của web.config (mà tôi làm trong suốt thời gian cài đặt thông qua dự án WebSetup).

1

Tôi cũng sử dụng web.DEV.config, web.TEST.config, web.PROD.config, vv

tôi thấy cách này đơn giản nhất, cách đơn giản và thẳng thắn nhất nếu dự án của bạn không phức tạp. Tôi không thích làm những thứ phức tạp hơn là cần thiết.

Tuy nhiên, tôi đã sử dụng NAnt và tôi nghĩ rằng nó hoạt động tốt cho việc này. Bạn có thể thiết lập các bản dựng cho các môi trường khác nhau của mình. NAnt mất một số đọc để tìm hiểu làm thế nào để sử dụng nó nhưng nó khá linh hoạt.

http://aspnet.4guysfromrolla.com/articles/120104-1.aspx

http://nant.sourceforge.net/

tôi sử dụng nó cùng với CruiseControl.net và NUnit để thực hiện tự động hàng ngày được xây dựng với xác nhận đơn vị kiểm tra và nghĩ rằng họ làm việc tốt với nhau.

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