2009-05-13 8 views
31

Próbuję podzielić plik app.config na wiele plików, aby ułatwić zarządzanie różnicami wymaganymi w różnych środowiskach. Z niektórych odcinkach było łatwo ...configSource nie działa w system.serviceModel * lub * jego podsekcjach

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

stał

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

z "różne rzeczy" przeniesione do pliku system.diagnostics.dev.

Ale dla sekcji system.serviceModel to nie działa.

Teraz czytałem sugestie, że to nie działa dla samej system.serviceModel, ale działa na sekcjach pod nią: bindings, client, diagnostics itp Ale to samo dzieje się ze mną, gdy próbuję użyć configSource z jednym z nich. Kiedy kładę się

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

uzyskać:

Atrybut 'configSource' nie jest zadeklarowana.

Czy ktoś jeszcze to widział? Czy znasz rozwiązanie? (Być może mam przestarzały schemat czy coś takiego?)

+1

Działa tutaj - używamy tego codziennie w produkcji. Nie jest to wyświetlane i obsługiwane w edytorze Visual Studio - ale działa w środowisku uruchomieniowym! –

+0

Pytanie 1: czy próbowałeś nazwać swój zewnętrzny plik rozszerzeniem * .config? Pytanie 2: czy możesz pokazać nam jeden z zewnętrznych plików konfiguracyjnych? –

Odpowiedz

61

Edytor VS.NET jęczy o konfiguracji, ale działa.

mam config jak to ...

<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> 

... który działa dobrze.

+1

Tak, masz rację. Teraz widzę, że narzeka podczas edycji konfiguracji, ale kiedy uruchomisz aplikację, to faktycznie działa. –

+1

Ach, rozumiem - w końcu działa. Nienawidzę powiedzieć: Powiedziałem tak :-) –

+0

Martin powiedział tak wyraźniej niż ty, marc_s. –

23

Będzie NOT pracować na <system.serviceModel> ponieważ jest to konfiguracja SectionGroup - nie sekcja konfiguracji.

To WILL działa dobrze w czasie wykonywania na wszystko poniżej <system.serviceModel> - robimy to cały czas. Odpowiedź Martina pokazuje to ładnie - jego próbka zadziała.

+0

Jeśli to będzie działać na wszystko poniżej , to dlaczego NIE działa na coś poniżej ? Czytałem w kilkunastu miejscach, że "będzie" działać. Ale to * nie *. Stąd pytanie. –

+0

Więc tak naprawdę mówisz, że otrzymam komunikat o błędzie, czy mi się to podoba, czy nie, ale powinienem go zignorować i zadziała to automagicznie? –

+0

Nie, mówię, że dzieje się tutaj coś dziwnego, skoro "działa na moim komputerze" :-) Jakiej wersji .NET używasz? –

6

Jedna rzecz, o której należy pamiętać podczas przenoszenia sekcji konfiguracji do oddzielnych plików: upewnij się, że oddzielony plik konfiguracyjny NIE zawiera atrybutu configSource. Na przykład, jeśli podzielić się swoją sekcję powiązań jak tak,

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

upewnić się, że rzeczywisty plik powiązania nie zawiera „configSource” atrybut:

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

Wiem, że może wydawać się oczywiste, ale jeśli wpisujesz atrybut configSource, a następnie wycinasz i wklejasz do nowego pliku, łatwo zapomnieć o wyjęciu tego atrybutu.

Mam nadzieję, że to pomoże.

Powiązane problemy