Domanda

Abbiamo un "motore" che carica la dll in modo dinamico (tutto ciò che è situato in una directory) e chiama il Flusso di lavoro corsi da loro in modo riflesso.

Ora abbiamo alcuni nuovi Flussi di lavoro che richiedono l'accesso a un database, così ho pensato che vorrei mettere un file di configurazione nella directory della dll.

Ma per qualche motivo il mio Workflow non vedo il file di configurazione.

<configuration>
  <appSettings>
      <add key="ConnectString" value="Data Source=officeserver;Database=mydatabase;User ID=officeuser;Password=officeuser;" />
  </appSettings>
</configuration>

Dato il precedente file di configurazione, il seguente codice stampa una stringa vuota:

Console.WriteLine(ConfigurationManager.AppSettings["ConnectString"]);

Penso che quello che voglio è solo di specificare un nome file di configurazione, ma sto avendo problemi qui.Sto solo non ottenere risultati.Qualcuno ha i puntatori?

È stato utile?

Soluzione

Se il codice di esempio per la lettura AppSettings è nella DLL, quindi cerca di leggere il file di configurazione per l'applicazione e non il file di configurazione per la DLL.Questo è perché stai usando la Reflection per eseguire il codice.

Altri suggerimenti

Divertente, dove sono, stiamo facendo qualcosa di molto simile, e il file di configurazione di carichi bene.Nel nostro caso penso che ogni nuovo file di configurazione del nome corrisponde a quello di operazioni di montaggio.Così MyLibrary.dll sarebbe un file denominato MyLibrary.dll.config con informazioni per il file in assemblea.Inoltre, l'esempio che ho a portata di mano è utilizzando VB.Net invece di C# (abbiamo un po ' di entrambi) e tutte le impostazioni che ci sono per il VB personali specifiche.Impostazioni dello spazio dei nomi, in modo da non usare la classe ConfigurationManager direttamente per la loro lettura.

Impostazioni stessi assomigliare a questo:

<applicationSettings>
    <MyLibrary.My.MySettings>
        <setting name="SomeSetting" serializeAs="String">
            <value>12345</value>
        </setting>
    </MyLibrary.My.MySettings>
</applicationSettings>

Ho scritto questo per un sistema simile.Mi ricordo che ho usato Assembly.GetExecutingAssembly per ottenere il percorso del file DLL, è aggiunto .config a quel nome, caricato come un XmlDocument, si accede alla <appSettings> nodo e lo passò a un NameValueSectionHandler's Create metodo.

Qui è un modo - Dominio di applicazione.CurrentDomain.SetData ("APP_CONFIG_FILE", "percorso del file di configurazione");

Chiamare il costruttore.

Se mi ricordo bene, l'app.config saranno caricati dalla directory dell'applicazione, quindi, se siete di caricamento dll da qualche altra directory, i tasti hanno bisogno nella vostra applicazione file di configurazione.

Non sono del tutto sicuro, ma credo che la classe funziona solo con il percorso del metodo di immissione del dominio di applicazione (il percorso del file exe la maggior parte del tempo) per impostazione predefinita.È necessario chiamare OpenExeConfiguration(string percorsoeseguibile) (Framework 2.0 e versioni successive) prima di scegliere un diverso file di configurazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top