9

Tôi cần thay đổi chuỗi kết nối của mình trong tệp web.config dựa trên biến môi trường (cho các môi trường khác nhau, như dev/dàn dựng/sản xuất, v.v.). Tôi đã thấy các giải pháp khác sử dụng các tác vụ xây dựng để thực hiện các cấu hình thay đổi khác nhau, nhưng không thể tìm thấy thứ gì đó sẽ cho phép tôi thay đổi chuỗi kết nối của mình dựa trên biến môi trường. Có ai biết về bất kỳ cách nào để làm điều này?Thay đổi tệp web.config dựa trên Biến môi trường trong ASP.NET

Trả lời

7

Chúng tôi tận dụng các thuộc tính configSource cho appSettings và connectionStrings yếu tố trong web.config.

Về cơ bản, chúng tôi có cùng tệp web.config cho tất cả các môi trường của chúng tôi: dev, qa và sản xuất.

Sau đó, chúng tôi sử dụng riêng biệt "môi trường cụ thể" file .. Ví dụ ...

Trong web.config:

<?xml version="1.0"?> 
<configuration> 
    <appSettings configSource="local.appsettings.config" /> 
    <connectionStrings configSource="local.connectionstrings.config" /> 
</configuration> 

Sau đó, chúng tôi duy trì các tập tin sau đây:

local.appsettings.config.development 
local.appsettings.config.qa 
local.appsettings.config.production 
local.connectionstrings.config.development 
local.connectionstrings.config.qa 
local.connectionstrings.config.production 

Vì chúng tôi đã biên dịch trước tất cả các ứng dụng asp.net trước khi triển khai, chúng tôi đã có một tác vụ msBuild tùy chỉnh được sử dụng bởi giải pháp CI của chúng tôi sao chép các tệp cấu hình phù hợp (dựa trên môi trường đích ment) vào file config thích hợp ...

Vì vậy, nếu chúng ta đang triển khai để dev, local.appsettings.config.development -> local.appsettings.config

Nếu chúng ta đang triển khai để qa, địa phương .appsettings.config.qa -> local.appsettings.config

Điều này cho phép chúng tôi giữ cho web.config lõi giống nhau trên tất cả các môi trường của chúng tôi.

+0

Hey cảm ơn, là có cách nào để làm điều này dựa trên một biến môi trường mặc dù? Tôi muốn làm điều đó theo cách này nhưng khách hàng của tôi yêu cầu làm điều đó dựa trên một biến môi trường mà họ đã thiết lập trong mỗi môi trường khác nhau của họ. Nếu nó làm điều đó, tôi thiếu một phần (nơi nó nhìn vào một biến môi trường). Cảm ơn – Ryan

+1

Bạn sẽ phải giữ các chuỗi kết nối cho từng môi trường trong một tệp .config duy nhất .. cái gì đó như: Sau đó, trong mã của bạn (giả sử bạn có một loại lớp "đối tượng cấu hình" thì bạn có thể đọc đúng chuỗi dựa trên biến môi trường Lỗi * MAJOR * với điều đó kế hoạch là .. bây giờ bạn có tất cả các thông tin cấu hình sản xuất của bạn trong cùng một tập tin như dev và qa của bạn – datacop

+0

Tôi sử dụng methode này với các tập tin configSource trong thư mục App_Data. thư mục App_Data, trộn nó sau với cấu hình môi trường máy chủ của bạn. –

2

Làm thế nào để có hai chuỗi kết nối và một biến khác, như "isTesting" trong web.config của bạn, sau đó dựa trên giá trị của isTesting hãy chọn chuỗi kết nối nào để sử dụng?

0

bạn cũng có thể sử dụng các phần cấu hình và dựa trên chuyển đổi tên máy chủ giữa các phần. theo cách này bạn có thể có các phím có tên giống nhau.

link text

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