Para o aplicativo baseado na Web do Visual Studio 2010, temos os recursos de Transformação de configuração, pelos quais podemos manter vários arquivos de configuração para diferentes ambientes. Mas o mesmo recurso não está disponível para arquivos App.Config para Windows Services / WinForms ou Console Application.
Há uma solução alternativa disponível, conforme sugerido aqui: Aplicando a magia XDT ao App.Config .
No entanto, não é simples e requer várias etapas. Existe uma maneira mais fácil de obter o mesmo para arquivos app.config?
Respostas:
Isso funciona agora com o Visual Studio AddIn tratado neste artigo: SlowCheetah - Web.config Sintaxe de transformação agora generalizada para qualquer arquivo de configuração XML .
fonte
Tentei várias soluções e aqui está a mais simples que encontrei pessoalmente.
Dan apontou nos comentários que o post original pertence a Oleg Sych - obrigado, Oleg!
Aqui estão as instruções:
1. Adicione um arquivo XML para cada configuração ao projeto.
Normalmente você terá
Debug
eRelease
configurações para nomear seus arquivosApp.Debug.config
eApp.Release.config
. No meu projeto, criei uma configuração para cada tipo de ambiente, então você pode experimentar isso.2. Descarregue o projeto e abra o arquivo .csproj para edição
O Visual Studio permite editar arquivos .csproj diretamente no editor - basta descarregar o projeto primeiro. Em seguida, clique com o botão direito do mouse e selecione Editar <ProjectName> .csproj .
3. Vincule os arquivos App. *. Config ao App.config principal
Localize a seção arquivo de projeto que contém todos
App.config
eApp.*.config
referências. Você notará que as ações de criação estão definidas paraNone
:Primeiro, defina a ação de compilação para todos eles
Content
.Em seguida, torne todos os arquivos específicos da configuração dependentes dos principais,
App.config
para que o Visual Studio os agrupe da mesma forma que cria arquivos de código e de designer.Substitua XML acima por um abaixo:
4. Ative a mágica de transformações (necessária apenas para as versões do Visual Studio anteriores ao VS2017 )
No final do arquivo após
e antes da final
insira o seguinte XML:
Agora você pode recarregar o projeto, construí-lo e desfrutar de
App.config
transformações!Para sua informação
Certifique-se de que seus
App.*.config
arquivos tenham a configuração correta como esta:fonte
v10.0
porv$(VisualStudioVersion)
para garantir que seu projeto funcione com todas as versões posteriores do VS.Outra solução que encontrei NÃO é usar as transformações, mas apenas ter um arquivo de configuração separado, por exemplo, app.Release.config. Em seguida, adicione esta linha ao seu arquivo csproj.
Isso não apenas gerará o arquivo myprogram.exe.config correto, mas se você estiver usando o Projeto de Instalação e Implantação no Visual Studio para gerar o MSI, forçará o projeto de implantação a usar o arquivo de configuração correto ao compactar.
fonte
<AppConfig>App.Release.config</AppConfig>
linha dentro da<PropertyGroup
condição existente para aRelease
configuração e o IDE mostrou uma linha ondulada abaixo da<AppConfig>
linha ... dizendo que não estava no esquema ou algo assim, mas salvei o arquivo de qualquer maneira e recarreguei o arquivo do projeto e fiz uma compilação naRelease
configuração e funcionou!Na minha experiência, as coisas que preciso tornar específicas do ambiente são: cadeias de conexão, configurações de aplicativos e configurações frequentemente smpt. O sistema de configuração permite especificar essas coisas em arquivos separados. Então você pode usar isso em seu app.config / web.config:
O que normalmente faço é colocar essas seções específicas da configuração em arquivos separados, em uma subpasta chamada ConfigFiles (na raiz da solução ou no nível do projeto, depende). Eu defino um arquivo por configuração, por exemplo, smtp.config.Debug e smtp.config.Release.
Em seguida, você pode definir um evento de pré-construção da seguinte maneira:
No desenvolvimento da equipe, você pode ajustar isso ainda mais, incluindo% COMPUTERNAME% e / ou% USERNAME% na convenção.
Obviamente, isso implica que os arquivos de destino (x.config) NÃO devem ser colocados no controle de origem (uma vez que são gerados). Você ainda deve adicioná-los ao arquivo do projeto e definir sua propriedade de tipo de saída como 'copy always' ou 'copy if newer'.
Simples, extensível e funciona para todos os tipos de projetos do Visual Studio (console, winforms, wpf, web).
fonte
<?xml version="1.0"?> <smtp deliveryMethod="SpecifiedPickupDirectory"> <specifiedPickupDirectory pickupDirectoryLocation="C:\mail"/> <network host="localhost"/> </smtp>
A transformação:<?xml version="1.0"?> <smtp xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xdt:Transform="Replace" from="[email protected]" deliveryMethod="Network"> <network .../> </smtp>
Inspirado por Oleg e outros nesta questão, levei a solução https://stackoverflow.com/a/5109530/2286801 um passo adiante para permitir o seguinte.
Esta solução funciona executando a transformação app.config antes que o app.config seja referenciado pela primeira vez no processo MSBuild. Ele usa um arquivo de destinos externos para facilitar o gerenciamento em vários projetos.
Instruções:
Etapas semelhantes à outra solução. Eu citei o que permanece o mesmo e o incluí para completude e comparação mais fácil.
0. Adicione um novo arquivo ao seu projeto chamado AppConfigTransformation.targets
3. Vincule os arquivos App. *. Config ao App.config principal
Localize a seção do arquivo do projeto que contém todas as referências App.config e App. *. Config e substitua da seguinte maneira. Você notará que usamos Nenhum em vez de Conteúdo.
insira o seguinte XML:
Feito!
fonte
Você pode usar um arquivo de configuração separado por configuração, por exemplo, app.Debug.config, app.Release.config e, em seguida, usar a variável de configuração no seu arquivo de projeto:
Isso criará o arquivo ProjectName.exe.config correto, dependendo da configuração em que você está construindo.
fonte
Eu escrevi uma boa extensão para automatizar a transformação app.config como a que foi criada na Transformação de Configuração de Projetos de Aplicativos da Web
A maior vantagem dessa extensão é que você não precisa instalá-la em todas as máquinas de compilação
fonte
Instale a "Ferramenta de transformação de configuração" no Visual Studio no Marketplace e reinicie o VS. Você também poderá ver a transformação de visualização do menu para app.config.
https://marketplace.visualstudio.com/items?itemName=GolanAvraham.ConfigurationTransform
fonte
Então, acabei adotando uma abordagem um pouco diferente. Segui as etapas de Dan na etapa 3, mas adicionei outro arquivo: App.Base.Config. Este arquivo contém as definições de configuração que você deseja em todos os App.Config gerados. Então eu uso o BeforeBuild (com a adição de Yuri no TransformXml) para transformar a configuração atual com a configuração Base no App.config. O processo de compilação usa o App.config transformado normalmente. No entanto, um aborrecimento é que você deseja excluir o App.config em constante mudança do controle de origem posteriormente, mas os outros arquivos de configuração agora dependem dele.
fonte
Apenas um pequeno aprimoramento da solução que parece estar publicada em todos os lugares agora:
fonte
$(VisualStudioVersion)
estar definido ao usar o MSBuild diretamente.Criei outra alternativa à publicada por Vishal Joshi, na qual o requisito de alterar a ação de compilação para Conteúdo foi removido e também implementei o suporte básico para a implantação do ClickOnce. Eu digo básico, porque não o testei completamente, mas deve funcionar no cenário típico de implantação do ClickOnce.
A solução consiste em um único projeto MSBuild que uma vez importado para um projeto de aplicativo do Windows existente (* .csproj) estende o processo de compilação para contemplar a transformação app.config.
Você pode ler uma explicação mais detalhada no Visual Studio App.config XML Transformation e o arquivo de projeto MSBuild pode ser baixado do GitHub .
fonte
Se você usa um TFS online (versão em nuvem) e deseja transformar o App.Config em um projeto, pode fazer o seguinte sem instalar nenhuma ferramenta extra. No VS => Descarregar o projeto => Editar arquivo do projeto => Vá para a parte inferior do arquivo e adicione o seguinte:
AssemblyFile e Destination funciona para uso local e servidor TFS online (Cloud).
fonte
A solução proposta não funcionará quando uma biblioteca de classes com o arquivo de configuração for referenciada em outro projeto (no meu caso, era a biblioteca de projetos do trabalhador do Azure). Ele não copiará o arquivo transformado correto da
obj
pasta para abin\##configuration-name##
pasta. Para fazê-lo funcionar com alterações mínimas, você precisa alterar oAfterCompile
destino paraBeforeCompile
:fonte