2013-02-14 3 views
45

Sto provando a separare la mia stringa di connessione dal mio App.config e, poiché non è possibile eseguire trasformazioni come con Web.config, ho pensato che potrei utilizzare l'attributo configSource per puntare a un'altra configurazione file con la stringa di connessione in, ma non sembra funzionare.connectionStrings configSource in App.config non funziona

Questo funziona, App.config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=*snip*" requirePermission="false" /> 
    </configSections> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 
    <connectionStrings> 
    <add name="DefaultConnection" 
     providerName="System.Data.SqlClient" 
     connectionString="Server=*snip*" /> 
    </connectionStrings> 
</configuration> 

Ma questo non lo fa, App.config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=*snip*" requirePermission="false" /> 
    </configSections> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 
    <connectionStrings configSource="connections.config" />  
</configuration> 

connections.config:

<connectionStrings> 
    <add name="DefaultConnection" 
     providerName="System.Data.SqlClient" 
     connectionString="*snip*" /> 
</connectionStrings> 

sto cercando il più semplice dei soluzioni.

Qualche idea?

+1

_Che cosa_ non funziona? Quali sono i sintomi? Ciò che hai postato funziona per me. I file '.config' si trovano nella stessa directory? – Oded

+0

La classe che sto usando usa un 'DbContext' che accetta un parametro stringa di connessione, quindi passo a quella DefaultConnection. Funziona quando connectionString è definito in App.config ma non nel file separato. –

+1

Assicurarsi che entrambi i file siano salvati e nella stessa directory (o che il percorso relativo sia corretto in 'configSource'). – Oded

risposta

116

Se il file è stato aggiunto dall'utente, l'azione di creazione (nelle proprietà del file) potrebbe non essere stata impostata correttamente.

L'opzione Copy to Output Directory deve essere Copy if newer o Copy Always per assicurarsi che il file .config finisce nella directory bin, altrimenti non ci sarà e cercare di caricare la configurazione fallirà.

+2

ha funzionato perfettamente. Grazie uomo! –

+4

Completamente dimenticato di questo.Grazie mille :) –

+10

Nota: quindi, in alcune applicazioni web, avrai anche aggiunto riferimento a: configSource = "bin \ connections.config" invece di configSource = "connections.config" – piotrwest

1

Ho avuto lo stesso problema e la soluzione Oded funziona per me. Ma mi limiterò a precisare che per scoprire come modificare il file "opzione Copia directory di output per" essere "copia se più recente o copiare sempre", è necessario

  • rigth clic sul file
  • select proprietà
  • vanno ad avanzare
  • poi vedrà copiare nella directory di output e scelta copiare se più recente o copiare sempre

Questo mi ha aiutato, spero che vi aiuterà anche