Pergunta

Eu tenho uma relativamente grande sistema Net que consiste em uma série de diferentes aplicações. Ao invés de ter lotes de diferentes arquivos app.config, eu gostaria de compartilhar um único arquivo de configuração entre todos os aplicativos.

Eu também gostaria de ter uma versão ao desenvolver na minha máquina, uma versão para outra pessoa em desenvolvimento em sua máquina, uma versão para um sistema de teste e uma versão para um sistema vivo.

Existe uma maneira fácil de fazer isso?

Foi útil?

Solução

Para grandes quantidades de configuração que é necessária por várias aplicações, que iria colocar esta configuração, num repositório central, por exemplo um banco de dados, arquivo em um local comum.

Para usar diferentes versões de um arquivo de configuração para diferentes ambientes, criar uma configuração de compilação para cada um dos diferentes ambientes e um arquivo de configuração nomeado após o meio ambiente, por exemplo:

production.app.config produção teste test.app.config

Você pode então usar um evento de compilação pré copiar a configuração correta sobre o app.config padrão no seu projeto. Este, então, obter copiados para o diretório de saída como normal.

O evento de compilação pré seria semelhante ao acima, basta usar $ (Configuração) para obter o arquivo apropriado para o ambiente que você quiser.

Você pode combinar isso com o acima para copiar os arquivos de configuração gerais de construção específicas para cada projeto.

Outras dicas

Você pode usar um evento Post-Build (Propriedades -> Eventos compilação) sobre os seus projectos "filho" para copiar um arquivo de configuração de um projeto mestre para outros, como este:

copy /Y c:\path\to\master\project\app.config $(TargetPath).config
exit 0

(A "exit 0", como os impede última linha de um erro de compilação).

Para ter arquivos de configuração separados para diferentes alvos de construção ( "Release", "debug", etc), você pode editar o arquivo .csproj (ou .vbproj) em NOTEPAD.EXE para adicionar uma tag AppConfig para cada um o alvo grupos, como este:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>.\bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <AppConfig>debug.app.config</AppConfig>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>.\bin\Devel\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <AppConfig>release.app.config</AppConfig>
  </PropertyGroup>

Observe o novo marcas presentes em cada grupo.

Em vez de adicionar elementos <add> à sua seção <appSettings> de seu arquivo de configuração, você pode adicionar um atributo file= ao elemento <appSettings> para contá-la para carregar os dados de um arquivo diferente. Você poderia, então, manter suas configurações comuns nesse arquivo comum.

appSettings elemento (Configurações Gerais Esquema) na MSDN Library .

É possível usar NTFS links simbólicos para compartilhar um arquivo NET config. Eu já vi isso usado com sucesso em uma solução que compreende de um applicaton ASP.NET, aplicativos de console, e muito mais.

Você também pode colocar as definições de configuração para o machine.config para compartilhá-los entre múltiplas aplicações. Isso torna a implantação embora mais problemático.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top