ASP.NET web.config: configSource vs. atrybuty pliku

187

W obrębie web.configpliku w aplikacji ASP.NET niektóre sekcje config, takie jak appSettingsi connectionStrings, obsługują atrybuty filei configSource.

Jaka jest różnica między używaniem fileatrybutu a configSourceatrybutem? Kiedy należy użyć tego atrybutu i czy można użyć obu?

<?xml version="1.0"?>
<configuration>
  <appSettings file="AppSettings.config">
  </appSettings>
  <connectionStrings configSource="ConnectionStrings.config">      
  </connectionStrings>
  <!-- ... -->
</configuration>
Seb Nilsson
źródło

Odpowiedzi:

300

file atrybut

configSource atrybut

fileAtrybut określa zewnętrzny plik zawierający ustawienia niestandardowe, jak to zrobić w wejściu appSettings w pliku web.config. Tymczasem plik zewnętrzny określony w configSourceatrybucie zawiera ustawienia dla sekcji, dla której deklarujesz configSource. Na przykład, jeśli użyjesz configSourceatrybutu sekcji strony, plik zewnętrzny będzie zawierał ustawienia dla sekcji stron.

Ustawienia niestandardowe zadeklarowane w konfiguracji zewnętrznej określonej w fileatrybucie zostaną scalone z ustawieniami w appSettings sekcji web.configpliku. W międzyczasie configSource nie nie obsługują połączenia, oznacza to, że będziesz musiał przejść całą sekcję ustawień do pliku zewnętrznego.

http://www.codeproject.com/Messages/1463547/Re-difference-between-configSource-and-file-attrib.aspx

Massimiliano Peluso
źródło
10
Ponadto atrybut „plik” umożliwia określenie plików poza bezpośrednim drzewem katalogów, co jest ważne w przypadku udostępniania wspólnych ustawień między różnymi witrynami. Niestety atrybut „configsource” ogranicza cię do plików w drzewie currrent, więc dla wspólnych ustawień musisz określić katalog wirtualny w IIS.
Ed Graham
6
Mój powyższy komentarz nie był całkowicie poprawny i najwyraźniej przegapiłem nieco dowolne pięciominutowe okno do edycji! Nie można ustawić katalogu wirtualnego w IIS, aby pliki „configsource” mogły znajdować się poza bezpośrednim drzewem katalogów. To naprawdę jest dość ograniczające. Rozwiązałem go za pomocą punktu połączenia (lub twardego łącza NTFS), ale nie jest to całkiem ładne ...
Ed Graham
1
WAO! Świetna odpowiedź ... to naprawdę pomogło mi: will not cause web application to restart when modifying the specified file. Potrzebuję, aby aplikacja uruchomiła się ponownie podczas modyfikowania dowolnego ustawienia w pliku zewnętrznym dla sekcji niestandardowej, więc droga jest taka configSource. Interesujące jest to, że używałem filei działały różne sekcje. filedziała również w sekcjach innych niż appSettingste, które są dobrze wyjaśnione w odpowiedzi.
Leniel Maccaferri
4
Chciałbym dodać do listy configSource: It must refer to a file in the same directory or in a subdirectory as the configuration file.. A także do listy plików: It can reside outside the directory of the configuration file itself..
frankhommers
2
Zaktualizowany link do elementu appSettings - docs.microsoft.com/en-us/dotnet/framework/configure-apps/…
Jarrod,