2011-06-25 11 views
7

Załóżmy, że mamy Assembly1 i Assembly2.Powtórzenie konfiguracji w odniesieniu do podzespołów

Assembly2 to biblioteka klasy C# używana przez Assembly1.

Odnośniki do stron internetowych i usług są konfigurowane i przechowywane w Asembly2/app.Config.

Ponadto ciągi połączeń EF znajdują się w Assembly2/app.config.

Kiedy używam Assembly2 w Assembly1, plik konfiguracyjny Assembly2 nie jest używany. W rzeczywistości w tym scenariuszu tylko konfiguracja Assembly1 wydaje się dostępna za pomocą domyślnych środków.

W rezultacie muszę skopiować zawartość config2 Assembly2 do konfiguracji Assembly1.

To działa dla mnie w przypadku wielu projektów.

Czy istnieje inny sposób? Lepszy sposób?

Wydaje się błędne powtarzanie danych konfiguracyjnych.

Czy masz rekomendację lub technikę, która działa?

Dziękuję.

Odpowiedz

4

Należy zastosować zmiany do pliku konfiguracyjnego zestawu punktu wejścia exe. Pliki konfiguracyjne biblioteki klas (dll) nigdy nie są używane. Są one tworzone przez Visual Studio, więc możesz łatwo skopiować ustawienia do plików konfiguracyjnych exe w razie potrzeby.

Poniżej znajduje się przykład pliku konfiguracyjnego dla zestawu exe, który zawiera zarówno ustawienia z biblioteki klas ClassLibrary1, jak i ustawienia z zespołu exe MainAssembly. Możesz zobaczyć, że oba ciągi połączenia są w jednym ustawieniu connectionStrings. Jeśli jednak chcesz ustawić inne ustawienia, oprócz ciągu połączenia, musisz dodać dodatkową sekcję.

Jeśli używasz już tej techniki, jest to właściwa droga. Ta technika jest elastyczna. Na przykład, jeśli masz więcej niż jeden projekt mający te same ciągi połączeń w jednym polu, możesz określić ciągi połączeń w pliku machine.config. W razie potrzeby możesz także zastąpić ustawienia w niektórych projektach.

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
    <sectionGroup name="applicationSettings" 
        type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 

     <!--This section declaratrion pasted here from dll conifg file --> 
     <section name="ClassLibrary1.Properties.Settings" 
       type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
       requirePermission="false" /> 

     <!--This section declaratrion was here in the first place --> 
     <section name="MainAssembly.Properties.Settings" 
       type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
       requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 
    <connectionStrings> 

    <!--This connection string was here in the first place --> 
    <add name="MainAssembly.Properties.Settings.MainAssemblyConnectionString" 
     connectionString="MainConnectionStringValue" /> 

    <!--This connection string pasted here from dll config file --> 
    <add name="ClassLibrary1.Properties.Settings.LibraryConnectionString" 
     connectionString="LibraryConnectionStringValue" 
     providerName="" /> 
    </connectionStrings> 
    <applicationSettings> 

    <!--This settings section pasted here from dll config file --> 
    <ClassLibrary1.Properties.Settings> 
     <setting name="LibrarySetting" 
       serializeAs="String"> 
     <value>LibrarySettingValue</value> 
     </setting> 
    </ClassLibrary1.Properties.Settings> 

    <!--This strings section was here in the first place --> 
    <MainAssembly.Properties.Settings> 
     <setting name="MainAssemblySetting" 
       serializeAs="String"> 
     <value>MainSettingValue</value> 
     </setting> 
    </MainAssembly.Properties.Settings> 
    </applicationSettings> 
</configuration> 
2

DLL (lub inny zestaw referencyjny) nie jest przeznaczony do przenoszenia własnego app.config, ale raczej ma wszystko skonfigurowane przez wywołującego. Więc wszystko powinno iść do app.config z exe.

Weźmy na przykład bibliotekę dostępu do danych udostępnionych, która wymaga ciągów połączeń z bazą danych. Biblioteka powinna być możliwa do użycia z różnych aplikacji o różnych wymaganiach dotyczących połączenia. Brak połączenia łańcucha ściśle z biblioteką współużytkowaną nie będzie działał, należy to zrobić u klienta przy użyciu biblioteki.

Możliwe jest wprowadzenie ogólnosystemowych ustawień, które wpływają na wszystkie aplikacje uruchomione na komputerze w pliku machine.config, ale należy zachować ostrożność, ponieważ wpłynie to na aplikacje w komputerze.

Powiązane problemy