2009-05-13 21 views
31

Tôi đang cố gắng chia tệp app.config thành nhiều tệp để giúp quản lý sự khác biệt cần thiết cho các môi trường khác nhau dễ dàng hơn. Với một số bộ phận đó là dễ dàng ...configSource không hoạt động trong system.serviceModel * hoặc * các phần con của nó

<system.diagnostics> 
    various stuff 
</system.diagnostics> 

trở thành

<system.diagnostics configSource="ConfigFiles\system.diagnostics.dev" /> 

với "những thứ khác nhau" chuyển sang các tập tin system.diagnostics.dev.

Nhưng đối với phần system.serviceModel, điều này dường như không hoạt động.

Bây giờ tôi đã đọc ý kiến ​​cho rằng nó không làm việc cho system.serviceModel chính nó, nhưng nó hoạt động cho các phần bên dưới: bindings, client, diagnostics, vv Tuy nhiên, điều tương tự sẽ xảy ra với tôi khi tôi cố gắng sử dụng configSource với một trong số họ. Khi tôi đưa vào

<system.serviceModel> 
    <bindings configSource="ConfigFiles\whateverFile.dev" /> 

tôi nhận được:

Các 'configSource' thuộc tính không được công bố.

Có ai khác nhìn thấy điều này không? Bạn có biết một giải pháp? (Có lẽ tôi có một lược đồ lỗi thời hay cái gì đó?)

+1

Hoạt động ở đây - chúng tôi sử dụng hàng ngày này trong sản xuất. Nó không được hiển thị và được hỗ trợ trong trình soạn thảo Visual Studio - nhưng nó hoạt động trong thời gian chạy! –

+0

Câu hỏi 1: bạn đã thử đặt tên tệp ngoài của bạn với phần mở rộng * .config chưa? Câu hỏi 2: bạn có thể chỉ cho chúng tôi một trong những tệp cấu hình bên ngoài đó không? –

Trả lời

61

Trình soạn thảo của VS.NET rên rỉ về cấu hình, nhưng nó hoạt động.

tôi có cấu hình như thế này ...

<system.serviceModel> 
    <behaviors configSource="config\system.servicemodel.behaviors.config" /> 
    <bindings configSource="config\system.servicemodel.bindings.config" /> 
    <client configSource="config\system.servicemodel.client.config" /> 
</system.serviceModel> 

... mà hoạt động tốt.

+1

Đúng, bạn nói đúng. Tôi thấy bây giờ nó phàn nàn khi chỉnh sửa cấu hình, nhưng khi bạn chạy ứng dụng, nó thực sự hoạt động. –

+1

Ah, tôi hiểu - nó hoạt động sau tất cả. Ghét phải nói: Tôi đã nói như vậy :-) –

+0

Martin nói rõ ràng hơn bạn đã làm, marc_s. –

23

Nó sẽ NOT hoạt động trên <system.serviceModel> vì đó là cấu hình SectionGroup - không phải là phần cấu hình.

S 01 hoạt động tốt khi chạy trên bất kỳ thứ gì bên dưới <system.serviceModel> - chúng tôi luôn làm việc này. Câu trả lời của Martin cho thấy nó rất hay - mẫu của anh ta sẽ hoạt động.

+0

Nếu nó S work làm việc trên bất kỳ thứ gì bên dưới , thì tại sao KHÔNG làm việc với bất kỳ điều gì bên dưới ? Tôi đã đọc ở hàng chục nơi nó "sẽ" hoạt động. Nhưng nó * không *. Do đó câu hỏi. –

+0

Vì vậy, những gì bạn đang thực sự nói là, tôi sẽ nhận được thông báo lỗi cho dù tôi thích hay không, nhưng tôi chỉ nên bỏ qua nó và nó sẽ tự động làm việc? –

+0

Không, tôi đang nói có điều gì đó kỳ quặc xảy ra ở đây, vì "nó hoạt động trên máy của tôi" :-) Phiên bản .NET nào bạn đang sử dụng? –

6

Một điều cần lưu ý khi di chuyển phần cấu hình của bạn để tách tệp: đảm bảo tệp cấu hình được phân tách của bạn KHÔNG chứa thuộc tính configSource. Ví dụ, nếu bạn chia của bạn phần ràng buộc của bạn ra như vậy,

<system.serviceModel> 
    <bindings configSource="yourConfigFile.config" /> 
</system.serviceModel> 

chắc chắn rằng bindings tập tin thực tế của bạn không chứa "configSource" thuộc tính:

<?xml version="1.0" encoding="utf-8"?> 
<bindings> 
    <!-- binding configuration stuff --> 
</bindings> 

Tôi biết rằng có vẻ hiển nhiên, nhưng nếu bạn nhập thuộc tính configSource, sau đó cắt và dán vào một tệp mới, thật dễ dàng để quên thuộc tính.

Hy vọng điều này sẽ hữu ích.

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