2013-07-02 16 views
12

Próbuję odwołać się do niektórych typowych ustawień konfiguracji między usługą systemu Windows i witryną MVC środowiska ASP.NET. Robię to za pomocą atrybutu pliku w ustawieniach aplikacji w App.config lub Web.config (odpowiednio). Plik (o nazwie common.config), do którego się odwołuje, jest połączonym plikiem w oddzielnym projekcie w tym samym rozwiązaniu. Ten common.config jest ustawiony na Content z Kopiować zawsze w zarówno projektów.Ustawienia aplikacji w aplikacji lub konfiguracji sieci Web przy użyciu połączonego pliku

This stack answer to a similiar question wydaje się sugerować przynajmniej dla configSource, że to rozwiązanie będzie działać. Nie chcę, aby configSource, ponieważ chcę tylko garść właściwości są wspólne wśród dwóch projektów. Aktualizacja: Po prostu próbowałem tego, a configSource również nie działa. Nie może znaleźć pliku konfiguracyjnego. To prowadzi mnie do przekonania, że ​​plik common.config nie jest zawsze traktowany jako treść z kopią.

Przykład App.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings file="common.config"> 
    <add key="NotCommonKey" value="1"/> 
    </appSettings> 
</configuration> 

Przykład Web.config

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <appSettings file="common.config"> 
    <add key="NotCommonKey2" value="2" /> 
    </appSettings> 
</configuration> 

Przykład common.config (Content -> kopiowania zawsze)

<appSettings> 
    <add key="CommonKey" value="1" /> 
</appSettings> 

Używam/WebConfigurationManager odczyt z właściwości AppSettings.

Wszelkie pomysły, dlaczego gdy plik common.config jest połączonym plikiem, jego wartości AppSettings nie są używane, a gdy nie jest połączone, działa tak jak zwykle?

Dzięki!

+1

1. Czy jesteś pewien, że plik common.config znajduje się w tym samym folderze co inne pliki konfiguracyjne? 2. Wszelkie zmiany w pliku common.config nie będą widoczne w aplikacji, dopóki nie zostanie uruchomiony ponownie. –

+0

1. Właściwie to myślę. Myślę, że z jakiegoś powodu, gdy uruchamiam debugowanie, nie kopiuję połączonego pliku common.config do folderu aplikacji internetowej/aplikacji konsoli, nawet jeśli jest on ustawiony na kopiowanie pliku. – scottheckel

+0

Zauważyłem, że jeśli utworzę aplikację konsolową, która używa połączonego pliku konfiguracyjnego, który znajduje się w innym projekcie, to działa. Musi to być specyficzne dla plików web.config. Stworzyłem problem na CodePlex https://aspnet.codeplex.com/workitem/10351 – scottheckel

Odpowiedz

9

W Web.Config musisz dodać "bin /" (przykład poniżej).

Domyślnie web.config NIE jest kopiowany do folderu bin, ale plik common.config jest, dlatego należy dodać ścieżkę z pliku web.config. W projekcie innym niż web domyślnym zachowaniem jest to, że App.config jest kopiowany do folderu bin o nazwie MyProgram.exe.config i znajduje się w tym samym katalogu, co plik common.config.

<appSettings file="bin/common.config"> 
+1

Wrong - jedynym przypadkiem, w którym plik konfiguracyjny jest kopiowany do folderu bin, jest sytuacja, gdy plik web.config jest oznaczony kompilacją akcja "kompilacji". W takim przypadku można podać nazwę zespołu, ale z rozszerzeniem "config". tj. MyProgram.dll.config – csharpforevermore

+2

Myślę, że nie zrozumiałeś mnie - moim punktem jest to, że web.config NIE jest kopiowany do folderu bin, ale plik common.config jest, dlatego musisz dodać ścieżkę z web.config.W projekcie innym niż web domyślnym zachowaniem jest to, że app.config jest kopiowany do folderu bin o nazwie MyProgram.exe.config i znajduje się w tym samym katalogu co common.config –

+0

Zaktualizowano odpowiedź, dobrze? –

Powiązane problemy