Cách xóa chuỗi kết nối bằng cách sử dụng biến đổi cấu hình


76

Tôi có một Web.config với một số Chuỗi kết nối

<connectionStrings>
    <add name="connStr1" connectionString="...
    <add name="ConnStr2" connectionString="...
    <add name="connStr3" connectionString="...

Có cách nào sử dụng chuyển đổi cấu hình để loại bỏ một chuỗi kết nối cụ thể không? Cái gì đó như:

<connectionStrings>
    <xdt:Remove connStr2?

Rõ ràng là không có ở đâu gần đúng cú pháp, nhưng bạn nhận được sự trôi dạt của tôi ...

Câu trả lời:


81

Từ tài liệu MSDN về chủ đề:

<configuration xmlns:xdt="...">
  <connectionStrings>
    <add xdt:Transform="Remove" />
  </connectionStrings>
</configuration>

Điều Transform="Remove"kỳ diệu mà bạn đang tìm kiếm. Ngoài ra còn có một Transform="RemoveAll"cái mà bạn có thể sử dụng cùng với (các) phần bổ sung cụ thể.

BIÊN TẬP

Suy nghĩ thứ hai, bạn cũng có thể kết hợp Locatorthuộc tính với thuộc tính đãRemove xác định ở trên để giới hạn phần tử nào bạn thực sự muốn xóa.

Rõ ràng hơn:

<configuration xmlns:xdt="...">
  <connectionStrings>
    <add xdt:Transform="Remove" xdt:Locator="XPath(configuration/connectionStrings[@name='ConnStr2'])" />
  </connectionStrings>
</configuration>

Hoặc tương tự sẽ hoạt động.


17
XPath sẽ không hoạt động. Cú pháp đúng là cú pháp được đề cập bởi @ hyke20 dưới đây. Để kiểm tra việc chuyển đổi trực tuyến, bạn có thể sử dụng: webconfigtransformationtester.apphb.com
Leniel Maccaferri

Tại sao bạn lại xóa không gian tên thực tế trong ví dụ trên? Nó là: xmlns: xdt = " schemas.microsoft.com/XML-Document-Transform ". Đầy đủ: [<configuration xmlns: xdt = " schemas.microsoft.com/XML-Document-Transform">]
Nicholas Petersen

@AlexanderRyanBaggett Làm như vậy sẽ hạn chế tính khả chuyển trong môi trường của mã, đây là lý do để bắt đầu các biến đổi cấu hình được sử dụng. Có thể có một cách để làm điều đó nhưng tôi khuyên bạn nên đặt một câu hỏi mới.
M.Babcock

116

Thao tác này sẽ xóa một chuỗi kết nối cụ thể dựa trên tên của nó.

<configuration>
  <connectionStrings> 
    <add name="ConnStr2" xdt:Transform="Remove" xdt:Locator="Match(name)" connectionString=" " /> 
  </connectionStrings> 
</configuration>

Lưu ý rằng connectionStringgiá trị không phải là chuỗi trống mà thay vào đó là khoảng trắng. Mọi giá trị không trống sẽ làm được.


2
Đối số 'DefaultConnection-Web.config Connection String' không được để trống hoặc rỗng. Là những gì tôi nhận được khi đặt mã của bạn bên trong web.release.config của tôi. Có ý kiến ​​gì không? Cảm ơn
Leigh

8
Tại sao connectionStringthuộc tính lại bắt buộc? Bạn không xdt:Transform="Remove"thể xóa nút chỉ dựa trên tên của nó?
Dmytro Shevchenko

@DmytroShevchenko & Leigh - Tôi không gặp lỗi đó khi tôi sử dụng ví dụ của hyke20, nhưng nếu tôi rời khỏi thuộc tính 'connectionString', tôi sẽ nhận được cảnh báo rằng nó bị thiếu.
Robotnik

Bạn có thể nhận được cảnh báo nếu thuộc tính không xuất hiện, nhưng việc chuyển đổi vẫn phải áp dụng chính xác. Cá nhân tôi sử dụng connectionString="any"để nói rõ với tôi trong tương lai rằng phép biến đổi không quan tâm giá trị của chuỗi kết nối là gì.
Josh Gust
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.