Sử dụng Web.config khác nhau trong môi trường phát triển và sản xuất


194

Tôi cần sử dụng chuỗi kết nối cơ sở dữ liệu khác nhau và địa chỉ máy chủ SMTP trong ứng dụng ASP.NET của mình tùy thuộc vào nó được chạy trong môi trường phát triển hoặc sản xuất.

Ứng dụng đọc các cài đặt từ tệp Web.config thông qua thuộc tính WebConfigurationManager.AppSinstall .

Tôi sử dụng lệnh Build / Publish để triển khai ứng dụng lên máy chủ sản xuất thông qua FTP và sau đó thay thế thủ công Web.config từ xa bằng một cái đúng.

Có thể bằng cách nào đó đơn giản hóa quá trình triển khai? Cảm ơn!

Câu trả lời:


159

Trong Visual Studio 2010 trở lên, giờ đây bạn có khả năng áp dụng chuyển đổi cho web.config tùy thuộc vào cấu hình bản dựng.

Khi tạo web.config, bạn có thể mở rộng tệp trong trình khám phá giải pháp và bạn sẽ thấy hai tệp:

  • Web.Debug.Config
  • Web.Release.Config

Chúng chứa mã chuyển đổi có thể được sử dụng để

  • Thay đổi chuỗi kết nối
  • Xóa theo dõi và cài đặt gỡ lỗi
  • Đăng ký trang lỗi

Xem Cú pháp chuyển đổi Web.config để triển khai dự án ứng dụng web trên MSDN để biết thêm thông tin.

Cũng có thể, mặc dù chính thức không được hỗ trợ, để áp dụng cùng một loại chuyển đổi cho một app.configtệp ứng dụng web . Xem blog Phil Bolduc liên quan đến cách sửa đổi tệp dự án của bạn để thêm một nhiệm vụ mới vào msbuild.

Đây là một yêu cầu lâu dài trên Visual Studio Uservoice .

Một tiện ích mở rộng cho Visual Studio 2010 trở lên, " SlowCheetah " có sẵn để đảm nhiệm việc tạo biến đổi cho bất kỳ tệp cấu hình nào. Bắt đầu với Visual Studio 2017.3, SlowCheetah đã được tích hợp vào IDE và cơ sở mã đang được Microsoft quản lý. Phiên bản mới này cũng hỗ trợ chuyển đổi JSON.


7
Lưu ý rằng điều này không làm việc cho các dự án trang web cũ . Chỉ dành cho các ứng dụng web . Tôi đã không thử xem liệu cách giải quyết của Phil Bolduc có hoạt động cho các trang web hay không, nhưng tôi nghi ngờ điều đó sẽ không xảy ra, vì họ không có các tệp dự án.
mo.

13
Cũng lưu ý rằng các biến đổi web.confg chỉ hoạt động cho XUẤT BẢN, chúng không hoạt động nếu bạn chỉ đơn giản xây dựng / chạy F5: ((((
Alex

7
Nếu web.config của bạn không chứa a Web.Debug.ConfigWeb.Release.Config, bạn có thể cần nhấp chuột phải Web.Configvà nhấp Add Config Transforms.
Doug S

1
@Alex: làm thế nào chúng ta có thể sử dụng nó để xây dựng đơn giản / F5?
người đánh bóng

1
liên kết trực tiếp đến SlowCheetah: marketplace.visualstudio.com/
Xiao

83

Các <appSettings>thẻ trong web.config hỗ trợ một thuộc tính tập tin đó sẽ được tải một cấu hình bên ngoài với thiết lập riêng của nó của khóa / giá trị. Chúng sẽ ghi đè mọi cài đặt bạn có trong web.config hoặc thêm vào chúng.

Chúng tôi tận dụng điều này bằng cách sửa đổi web.config của chúng tôi tại thời điểm cài đặt với thuộc tính tệp phù hợp với môi trường mà trang web đang được cài đặt. Chúng tôi làm điều này với một công tắc trên trình cài đặt của chúng tôi.

ví dụ;

<appSettings file=".\EnvironmentSpecificConfigurations\dev.config">

<appSettings file=".\EnvironmentSpecificConfigurations\qa.config">

<appSettings file=".\EnvironmentSpecificConfigurations\production.config">

Ghi chú:

  • Các thay đổi đối với .config được chỉ định bởi thuộc tính sẽ không kích hoạt khởi động lại quy trình công nhân asp.net

2
Đây là một câu trả lời tuyệt vời, đặc biệt là khi bạn có một lượng lớn môi trường và một số cài đặt cho một số môi trường có mật khẩu và tương tự mà bạn không muốn theo dõi trong kiểm soát nguồn.
Phil

1
Có một cách năng động để thay đổi đường dẫn tập tin? Dựa trên máy chủ nào bạn đang ở? Chỉ cần một lưu ý phụ là đây là một dự án trang web cũ, không phải là một ứng dụng web. Cảm ơn!
Phối cảnh

2
Có một thuộc tính restartOnExternalChangessẽ coi các tệp đó như thể chúng là web.configs. Nguồn: learnable.com/books/ Kẻ
David Schwartz

24

Bạn đã xem xét các dự án triển khai web?

http://www.microsoft.com/doads/details.aspx?FamilyId=0AA30AE8-C73B-4BDD-BB1B-FE697256C459&displaylang=vi

Có một phiên bản cho VS2005, nếu bạn không ở trong năm 2008.


Đây là một hướng dẫn tốt để sử dụng các dự án triển khai web: johnnycoder.com/blog/2010/01/07/ Khăn
Gary W

Các dự án triển khai web dường như là VS "Hồ sơ xuất bản" bây giờ diaryofaninja.com/blog/2012/08/26/ mẹo
jocull

13

Tôi cũng muốn biết. Điều này giúp cô lập vấn đề cho tôi

<ConnectionStrings configSource = "ConnectionStrings.config" />

Sau đó tôi giữ một ConnectionStrings.config cũng như "{host} ConnectionStrings.config". Đây vẫn là một vấn đề, nhưng nếu bạn làm điều này cho các phần khác nhau trong hai môi trường, bạn có thể triển khai và phiên bản cùng một web.config.

(Và tôi không sử dụng VS, btw.)


Nếu bạn đang sử dụng VS, bạn có thể sử dụng các sự kiện prebuild để sao chép từ debug.connectionstrings.config hoặc phát hành.connectionstrings.config như: copy $ (ProjectDir) $ (ConfigurationName) ConnectionStrings.config $ (ProjectDir) ConnectionStrings.config như đề xuất Scott. Hanselmann: hanselman.com/blog/ cường
Thomas

6

Tôi sử dụng NAnt Build Script để triển khai các môi trường khác nhau của mình. Tôi có nó sửa đổi các tệp cấu hình của mình thông qua XPath tùy thuộc vào nơi chúng được triển khai và sau đó nó tự động đưa chúng vào môi trường đó bằng cách sử dụng Beyond So sánh .

Mất một hoặc hai phút để thiết lập, nhưng bạn chỉ cần thực hiện một lần. Sau đó, các tập tin hàng loạt tiếp quản trong khi tôi đi lấy một tách cà phê. :)

Đây là một bài viết tôi tìm thấy trên đó.


5

Trong một dự án nơi chúng tôi có 4 môi trường (phát triển, thử nghiệm, dàn dựng và sản xuất), chúng tôi đã phát triển một hệ thống trong đó ứng dụng chọn cấu hình phù hợp dựa trên tên máy được triển khai.

Điều này làm việc cho chúng tôi bởi vì:

  • quản trị viên có thể triển khai các ứng dụng mà không liên quan đến các nhà phát triển (một yêu cầu) và không cần phải sử dụng các tệp cấu hình (mà họ ghét);
  • tên máy tuân thủ một quy ước. Chúng tôi khớp tên bằng cách sử dụng biểu thức chính quy và được triển khai cho nhiều máy trong một môi trường; và
  • chúng tôi đã sử dụng bảo mật tích hợp cho các chuỗi kết nối. Điều này có nghĩa là chúng tôi có thể giữ tên tài khoản trong các tệp cấu hình của mình tại thời điểm thiết kế mà không tiết lộ bất kỳ mật khẩu nào.

Nó hoạt động tốt với chúng tôi trong trường hợp này, nhưng có lẽ sẽ không hoạt động ở mọi nơi.


3

Trình chỉnh sửa cấu hình Thư viện Doanh nghiệp có thể giúp bạn thực hiện việc này. Nó cho phép bạn tạo một tệp cấu hình cơ sở và sau đó deltas cho từng môi trường. Sau đó, bạn có thể hợp nhất cấu hình cơ sở và delta để tạo một web.config dành riêng cho môi trường. Hãy xem thông tin ở đây sẽ đưa bạn qua nó tốt hơn tôi có thể.


3

Bạn cũng có thể làm cho nó một bước hậu xây dựng. Thiết lập cấu hình mới "Triển khai" cùng với Gỡ lỗi và Phát hành, sau đó có bản sao bước xây dựng sau trên web.config chính xác.

Chúng tôi sử dụng các bản dựng tự động cho tất cả các dự án của mình và với các bản dựng đó sẽ cập nhật tệp web.config để trỏ đến vị trí chính xác. Nhưng điều đó sẽ không giúp bạn nếu bạn đang làm mọi thứ từ VS.


3

Đây là một trong những lợi ích to lớn của việc sử dụng machine.config. Ở công việc cuối cùng của tôi, chúng tôi đã có môi trường phát triển, thử nghiệm và sản xuất. Chúng ta có thể sử dụng machine.config cho những thứ như chuỗi kết nối (với máy SQL dev / test / prod thích hợp).

Đây có thể không phải là giải pháp cho bạn nếu bạn không có quyền truy cập vào máy sản xuất thực tế (như, nếu bạn đang sử dụng một công ty lưu trữ trên một máy chủ được chia sẻ).


1

Bạn cũng có thể sử dụng tiện ích mở rộng "Chuyển đổi cấu hình" hoạt động giống như "SlowCheetah",


vâng, nó hoạt động nhưng chỉ khi triển khai chứ không phải biên dịch, tôi ước tôi có thể biên dịch và gỡ lỗi đơn giản bằng cách sử dụng các môi trường biến đổi cấu hình khác nhau
Ch'nycos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.