2013-02-14 12 views
45

Próbuję oddzielić ciąg połączenia od mojego App.config, a ponieważ nie możesz wykonywać transformacji, takich jak z Web.config, pomyślałem, że mogę użyć atrybutu configSource, aby wskazać inną konfigurację plik z ciągiem połączenia, ale wygląda na to, że nie działa.connectionStrings configSource w App.config nie działa

To działa, 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> 

Ale tego nie robi, 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> 

szukam najprostszych rozwiązania.

Wszelkie pomysły?

+1

_Co to nie działa? Jakie są objawy? To, co napisałeś, działa dla mnie. Czy pliki '.config' znajdują się w tym samym katalogu? – Oded

+0

Klasa, której używam używa 'DbContext', który pobiera parametr ciągu połączenia, więc przekazuję do tego DefaultConnection. Działa, gdy connectionString jest zdefiniowany w pliku App.config, ale nie w osobnym pliku. –

+1

Upewnij się, że oba pliki są zapisane i znajdują się w tym samym katalogu (lub że ścieżka względna jest poprawna w 'configSource'). – Oded

Odpowiedz

116

Jeśli plik został dodany sam, akcja kompilacji (we właściwościach pliku) mogła nie zostać prawidłowo ustawiona.

Opcja Copy to Output Directory musi być Copy if newer lub Copy Always aby upewnić się, że plik .config kończy się w katalogu bin, w przeciwnym razie nie będzie tam i próbuje załadować konfiguracja nie powiedzie się.

+2

Działa doskonale. Dzięki! –

+4

Zupełnie o tym zapomniałem.Wielkie dzięki :) –

+10

Uwaga: W niektórych aplikacjach internetowych będziesz musiał dodać także odwołanie do: configSource = "bin \ connections.config" zamiast configSource = "connections.config" – piotrwest

1

Miałem ten sam problem i rozwiązanie Odeda działa dla mnie. Ale ja po prostu precyzyjny, że aby dowiedzieć się, jak zmienić plik „Kopiuj opcji Output Directory, aby” być „kopia czy nowsza lub skopiować zawsze”, trzeba

  • rigth kliknąć na plik
  • wybierz właściwości
  • iść do góry
  • wtedy zobaczyć skopiować do katalogu wyjściowego i wyborem skopiować jeśli nowsze lub skopiować zawsze

to pomogło mi, mam nadzieję, że to pomoże zbyt

Powiązane problemy