ASP.NET web.config: configSource vs. atributos de arquivo

187

Dentro de um web.configarquivo em um aplicativo ASP.NET, algumas seções da configuração, como appSettingse connectionStrings, suportam os atributos filee configSource.

Qual é a diferença entre usar o fileatributo - e o configSourceatributo? Quando você deve usar qual atributo e você pode usar os dois?

<?xml version="1.0"?>
<configuration>
  <appSettings file="AppSettings.config">
  </appSettings>
  <connectionStrings configSource="ConnectionStrings.config">      
  </connectionStrings>
  <!-- ... -->
</configuration>
Seb Nilsson
fonte

Respostas:

300

file atributo

configSource atributo

O fileatributo especifica um arquivo externo que contém configurações personalizadas, como você faz na entrada appSettings do arquivo web.config. Enquanto isso, o arquivo externo especificado no configSourceatributo contém as configurações da seção para a qual você declara o configSource. Por exemplo, se você usar o configSourceatributo da seção de páginas, o arquivo externo conterá as configurações da seção de páginas.

As configurações personalizadas declaradas na configuração externa especificada no fileatributo serão mescladas com as configurações na appSettings seção no web.configarquivo. Enquanto isso, configSource ele não suporta mesclagem, significa que você precisará mover as configurações de seção inteiras para o arquivo externo.

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

Massimiliano Peluso
fonte
10
Além disso, o atributo "arquivo" permite especificar arquivos fora da árvore de diretórios imediata, o que é importante para compartilhar configurações comuns entre sites diferentes. Infelizmente, o atributo "configsource" restringe você a arquivos dentro da árvore atual; portanto, para configurações compartilhadas, você precisa especificar um diretório virtual no IIS.
Ed Graham #
6
Meu comentário acima não estava totalmente correto, e aparentemente perdi a janela de cinco minutos um tanto arbitrária para editá-la! Você não pode definir um diretório virtual no IIS para permitir que os arquivos "configsource" permaneçam fora da árvore de diretórios imediata. Então isso realmente é bastante limitador. Eu resolvi-lo usando um ponto de junção (ou NTFS hard link), mas não é exatamente bonita ...
Ed Graham
1
WAO! Grande resposta ... isso realmente me ajudou: will not cause web application to restart when modifying the specified file. Eu preciso que o aplicativo reinicie ao modificar qualquer configuração no arquivo externo para uma seção personalizada e, portanto, o caminho a seguir é o seguinte configSource. Interessante é que eu estava usando filee as diferentes seções estavam funcionando. filetambém funciona para outras seções, appSettingsmas existem essas dicas bem explicadas na resposta.
Leniel Maccaferri
4
Eu gostaria de adicionar à lista configSource: It must refer to a file in the same directory or in a subdirectory as the configuration file.. E também para a lista de arquivos: It can reside outside the directory of the configuration file itself..
frankhommers
2
Link atualizado para o elemento appSettings - docs.microsoft.com/en-us/dotnet/framework/configure-apps/…
Jarrod