2012-01-19 25 views
54

Tôi có một Web.config với một số connectionStringsLàm thế nào để loại bỏ một ConnectionString sử dụng Config Transformations

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

Có cách nào sử dụng biến đổi cấu hình để loại bỏ một connectionstring cụ thể? Một cái gì đó như:

<connectionStrings> 
    <xdt:Remove connStr2? 

Rõ ràng không có nơi gần đúng cú pháp, nhưng bạn nhận được của tôi ...

Trả lời

54

Từ MSDN documentation về đề tài này:

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

Các Transform="Remove" là sự kỳ diệu bạn 'Đang tìm kiếm. Ngoài ra còn có một Transform="RemoveAll" mà bạn có thể sử dụng cùng với một (các) add cụ thể.

EDIT

Ngày nghĩ thứ hai bạn cũng có thể kết hợp các Locator attribute với Remove định nghĩa ở trên để hạn chế yếu tố nào bạn thực sự muốn xóa.

dứt khoát hơn:

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

Hoặc tương tự nên làm việc.

+12

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

+0

Tại sao bạn xóa không gian tên thực tế trong ví dụ trên? Đó là: xmlns: xdt = "http://schemas.microsoft.com/XML-Document-Transform". Hoàn toàn: [] –

+0

Có cách nào để thực hiện điều này một cách linh hoạt thông qua mã C# không? –

85

Điều 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 giá trị connectionString không phải là chuỗi rỗng, nhưng thay vào đó là một khoảng trắng. Mọi giá trị không trống sẽ làm.

+2

Đối số 'Chuỗi kết nối DefaultConnection-Web.config' không được rỗng hoặc trống. Là những gì tôi nhận được khi tôi đặt mã của bạn bên trong web.release.config của tôi. Ý tưởng nào? Cảm ơn – Leigh

+5

Tại sao thuộc tính 'connectionString' lại yêu cầu? Không nên 'xdt: Transform =" Remove "' có thể loại bỏ các nút dựa trên tên của nó chỉ? –

+0

@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 nhận được cảnh báo rằng nó bị thiếu. – Robotnik

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