.net - Del Config-fil til Web og Window App (bedste måde)

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har oprettet et klassebibliotek (Core Processing Component) ved hjælp af C # i Visual Studio 2008 og tilføjet referencen i Website. Website adgang til klassebiblioteket med succes. Web.config har nogle konfigurationsværdier, som bruges af klassebiblioteket.


Nu vil jeg få adgang til samme komponent og konfiguration i et Window Application (C # VS-2k8). Jeg kan få adgang til det samme klassebibliotek i vinduesapplikation.


Men hvordan kan jeg Share the Web.config fil af websted med vinduesapplikationen? Så jeg behøver ikke at replikere den samme konfiguration.


Tak.


Opdatering # 1


Yderligere detaljer på spørgsmål 1: Jeg vil gerne add config file in Class Library i stedet for at have afhængig af applikationens konfigurationsfil, f.eks. Web.config på webstedet eller app.config i Windows-applikationen.


Dette er at reducere duplikat/konflikter med samme konfigurationer i flere apps.


Opdatering # 2


Jeg bruger følgende kode for at få konfigurationen fra den eksterne placering fra vindue og webapplikation. Men det virker ikke for mig.


D: est.exe.config fil


<configuration>
  <appSettings>
    <add key="KeyName" value="KeyValue"/>
  </appSettings>
</configuration>


Kode bag:


Configuration config = ConfigurationManager.OpenExeConfiguration("D:\test.exe.config");
            string strValue = config.AppSettings.Settings["KeyName"].Value;

Bedste reference


Det er et interessant spørgsmål. En mulighed er at bruge en anden persistensmekanisme, som er beregnet til flere forbrugere, som en database. Kan du gemme dine config data der?


ELLER ... du kunne bruge svaret her:


Adgang til App.config på et andet sted end det binære

Andre referencer 1


Bemærk, at hvis du skal eksternisere og centralisere nodene som connectionStrings og appSettings , accepterer de en configSource for at pege på en separat fil.


Ikke alle konfigurationselementer understøtter denne attribut.


<appSettings configSource="appSettings.config"/>
<connectionStrings configSource="connectionStrings.config"/>



  I .NET Framework version 2.0 kan du nu inkludere konfiguration
  indstillinger i en separat fil for alle konfigurationselementer, som
  understøtter configSource-attributten. Men når du bruger
  configSource attribut, skal du flytte hele sektionen til
  separate fil, fordi der ikke er nogen sammenlægning af elementindstillinger. der
  er en engangsskrivning til Web.config-filen, når du bruger configSource
  attribut. Dette får applikationen til genstart, men efterfølgende
  opdateringer til sektionen skrives direkte til den separate fil og
  Lad ikke efterfølgende genstart genstarte. For mere information,
  se ConfigSource. [24]


Andre referencer 2


Ja, jeg fik løsningen.
Takket være Bob Horn og JoeBilly for værdifulde input.


Jeg har implementeret konfigurationen som pr mit krav. Jeg har søgt meget for den komplette løsning, men får altid koncepterne og det lille stykke kode, det er derfor, jeg leverer den komplette arbejdskode.


Ved hjælp af nedenstående kode kan du opnå følgende og afspille med konfigurationen, som du vil.



  1. Almindelig konfiguration [CommonDB] kan defineres som en enkelt
    depot og kan gemmes i ekstern XML-fil. Klassebiblioteket får altid en værdi til web såvel som Windows-applikation.

  2. Webstedspecifik konfiguration [WebDBConn] kan gemmes i web.config.

  3. Windowspecifikke konfiguration [WindowDBConn] kan nævnes i app.config.

  4. Hvis du vil bruge samme nøgle med forskellige værdier [INPUT\_PATH] som i applikationen, skal du bruge samme nøgle og diff-værdierne i wen.config og app.config. Men husk, at nøglen ikke skal være tilgængelig i common.config. Den anden værdi, der er tilgængelig i common.config, vil blive hentet.

  5. Det gode er, at du behøver ikke at chage din kode bag tilgang for at få disse værdier.



Common.Config for klassebibliotek/fælles konfiguration


<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
    <add key="CommonDB" value="CommonDBValue" />    
</appSettings>


Web.Config for Website


<configuration>
    <appSettings file="D:Common.config">
        <add key="WebDBConn" value="WebDBConnValue" />
        <add key="INPUT\_PATH" value="INPUT\_PATH\_WEB" />
    </appSettings>
</configuration>


App.config til Windows-applikation


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings file="D:Common.config">
        <add key="WindowDBConn" value="WindowDBConnValue" />
        <add key="INPUT\_PATH" value="INPUT\_PATH\_WINDOW" />
    </appSettings>
</configuration>


Kode bag


string configValue = ConfigurationSettings.AppSettings["CommonDB"];


Tak...