Use o plugin SlowCheetah . Para mais opções e detalhes sobre como usar o SlowCheetah, continue lendo.
Como você já notou, não existe uma maneira padrão e fácil de usar diferentes arquivos de configuração para um projeto do tipo Biblioteca (.dll) . A razão é que o pensamento atual é: "Você não precisa"! Os desenvolvedores de framework consideram que você precisa de configuração para o arquivo executável: seja um console, desktop, web, aplicativo móvel ou qualquer outra coisa. Se você começar a fornecer configuração para uma dll , pode acabar com algo que posso chamar de inferno de configuração . Você pode não entender mais (facilmente) por que essas e aquelas variáveis têm valores tão estranhos que vêm aparentemente de lugar nenhum.
"Espere", - você pode dizer, "mas eu preciso disso para minha integração / teste de unidade, e é uma biblioteca!". E isso é verdade e isso é o que você pode fazer (escolha apenas um, não misture):
1. SlowCheetah - transforma o arquivo de configuração atual
Você pode instalar o SlowCheetah - um plug-in do Visual Studio que faz todo o rastreamento (ou transformação) de XML de baixo nível para você. A forma como funciona, resumidamente:
- Instale o SlowCheetah e reinicie o Visual Studio (Visual Studio> Ferramentas> Extensões e atualizações ...> Online> Galeria do Visual Studio> pesquise "Slow Cheetah")
- Defina as configurações da sua solução ( Debug e Release estão lá por padrão), você pode adicionar mais (clique com o botão direito na solução em Solution Explorer > Configuration Manager ... > Active Solution Configuration > New ...
- Adicione um arquivo de configuração se necessário
- Clique com o botão direito no arquivo de configuração> Adicionar transformação
- Isso criará arquivos de transformação - um por sua configuração
- Os arquivos de transformação funcionam como injetores / modificadores, eles encontram o código XML necessário no arquivo de configuração original e injetam novas linhas ou modificam o valor necessário, o que quer que você diga para fazer
2. Brinque com o arquivo .proj - copia-renomeia um arquivo de configuração totalmente novo
Tirado originalmente daqui . É uma tarefa MSBuild personalizada que você pode incorporar ao arquivo .proj do Visual Studio . Copie e cole o seguinte código no arquivo de projeto
<Target Name="AfterBuild">
<Delete Files="$(TargetDir)$(TargetFileName).config" />
<Copy SourceFiles="$(ProjectDir)\Config\App.$(Configuration).config"
DestinationFiles="$(TargetDir)$(TargetFileName).config" />
</Target>
Agora crie uma pasta no projeto chamado Config
e adicione novos arquivos lá: App.Debug.config , App.Release.config e assim por diante. Agora, dependendo da sua configuração, o Visual Studio escolherá o arquivo de configuração de uma Config
pasta e o copiará e renomeará no diretório de saída. Portanto, se você tiver o projeto PatternPA.Test.Integration e uma configuração de Depuração selecionados, na pasta de saída após a construção, você encontrará um arquivo PatternPA.Test.Integration.dll.config que foi copiado Config\App.Debug.config
e renomeado posteriormente.
Estas são algumas notas que você pode deixar nos arquivos de configuração
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- This file is copied and renamed by the 'AfterBuild' MSBuild task -->
<!-- Depending on the configuration the content of projectName.dll.config
is fully substituted by the correspondent to build configuration file
from the 'Config' directory. -->
</configuration>
No Visual Studio, você pode ter algo assim
3. Use arquivos de script fora do Visual Studio
Cada ferramenta de construção (como NAnt , MSBuild ) fornecerá recursos para transformar o arquivo de configuração, dependendo da configuração. Isso é útil se você construir sua solução em uma máquina de construção, na qual você precisa ter mais controle sobre o que e como preparar o produto para lançamento.
Por exemplo, você pode usar a tarefa dll de publicação na web para transformar qualquer arquivo de configuração
<UsingTask AssemblyFile="..\tools\build\Microsoft.Web.Publishing.Tasks.dll"
TaskName="TransformXml"/>
<PropertyGroup>
<!-- Path to input config file -->
<TransformInputFile>path to app.config</TransformInputFile>
<!-- Path to the transformation file -->
<TransformFile>path to app.$(Configuration).config</TransformFile>
<!-- Path to outptu web config file -->
<TransformOutputFile>path to output project.dll.config</TransformOutputFile>
</PropertyGroup>
<Target Name="transform">
<TransformXml Source="$(TransformInputFile)"
Transform="$(TransformFile)"
Destination="$(TransformOutputFile)" />
</Target>
AfterBuild
destino padrão . Durante a compilação típica, oAfterBuild
destino é chamado por padrão. Deve haver uma solução rápida para o caso de publicaçãoApp.<Target>.config
todo oApp.config
na dir projeto , não a dir saída.Condition="Exists('$(ProjectDir)App.$(Configuration).config')"
.Você pode tentar a seguinte abordagem:
Não tentei essa abordagem para
app.config
arquivos, mas funcionou bem com outros itens de projetos do Visual Studio. Você pode personalizar o processo de construção de quase qualquer maneira que desejar. De qualquer forma, me diga o resultado.fonte
app.config
configuração obrigatória e não está aplicando a configuração de versão se eu usar o VS build ou Teamcity VS sln build runner.Você deve considerar o ConfigGen . Foi desenvolvido para este fim. Ele produz um arquivo de configuração para cada máquina de implantação, com base em um arquivo de modelo e um arquivo de configurações. Sei que isso não responde especificamente à sua pergunta, mas pode muito bem responder ao seu problema.
Portanto, em vez de Depurar, Liberar etc., você pode ter Teste, UAT, Produção etc. Você também pode ter configurações diferentes para cada máquina de desenvolvedor, de modo que possa gerar uma configuração específica para sua máquina de desenvolvimento e alterá-la sem afetar a implantação de ninguém .
Um exemplo de uso pode ser ...
Se você colocar isso em seu arquivo .csproj, e você tem os seguintes arquivos ...
... então esse será o resultado ...
A partir do primeiro comando, um arquivo de configuração gerado para cada ambiente especificado no arquivo xls, colocado no diretório de saída $ (SolutionDir) ConfigGen
A partir do segundo comando, o App.config local usado em sua máquina de desenvolvimento será substituído pela configuração gerada especificada pela opção local (-l) e a opção nome do arquivo (-n).
fonte
Usando a mesma abordagem do Romeo, adaptei-o ao Visual Studio 2010:
Aqui você precisa manter os dois arquivos App.config em diretórios diferentes (appDebug e appRelease). Eu testei e funciona bem!
fonte
Estou usando a ferramenta XmlPreprocess para manipulação de arquivos de configuração. Ele está usando um arquivo de mapeamento para vários ambientes (ou vários destinos de construção no seu caso). Você pode editar o arquivo de mapeamento pelo Excel. É muito fácil de usar.
fonte
SlowCheetah e FastKoala da Galeria do VisualStudio parecem ser ferramentas muito boas que ajudam com esse problema.
No entanto, se você quiser evitar addins ou usar os princípios que eles implementam mais extensivamente em seus processos de construção / integração, adicionar isso aos arquivos proj msbuild * é uma solução abreviada.
Nota: isso é mais ou menos uma reformulação da resposta nº 2 de @oleksii.
Isso funciona para projetos .exe e .dll:
Isso funciona para projetos da web:
Observe que esta etapa acontece antes mesmo do início da construção adequada. A transformação do arquivo de configuração acontece na pasta do projeto. Para que o web.config transformado esteja disponível quando você estiver depurando (uma desvantagem do SlowCheetah).
Lembre-se de que, se você criar a pasta App_Config (ou como quiser chamá-la), os vários arquivos de configuração intermediários devem ter Build Action = None e Copy to Output Directory = Do not copy.
Isso combina as duas opções em um bloco. O apropriado é executado com base nas condições. A tarefa TransformXml é definida primeiro:
fonte
Veja se o mecanismo de transformação XDT (web.config) pode ajudá-lo. Atualmente, ele é suportado apenas nativamente para projetos da web, mas tecnicamente não há nada que impeça você de usá-lo em outros tipos de aplicativos. Existem muitos guias sobre como usar o XDT editando manualmente os arquivos do projeto, mas encontrei um plug-in que funciona muito bem: https://visualstudiogallery.msdn.microsoft.com/579d3a78-3bdd-497c-bc21-aa6e6abbc859
O plugin está apenas ajudando a definir a configuração, não é necessário para construir e a solução pode ser construída em outras máquinas ou em um servidor de construção sem o plugin ou qualquer outra ferramenta sendo necessária.
fonte
Resolvi este tópico com a solução que encontrei aqui: http://www.blackwasp.co.uk/SwitchConfig.aspx
Resumindo, o que eles afirmam é: "adicionando um evento pós-construção. [...] Precisamos adicionar o seguinte:
fonte
Eu ouvi coisas boas sobre o SlowCheetah, mas não consegui fazê-lo funcionar. Eu fiz o seguinte: adicione uma tag a cada um para uma configuração específica.
Ex:
fonte
Depois de algumas pesquisas sobre o gerenciamento de configurações para desenvolvimento e builds, etc., decidi lançar o meu próprio, disponibilizei-o no bitbucket em: https://bitbucket.org/brightertools/contemplate/wiki/Home
Esses vários arquivos de configuração para vários ambientes, é uma ferramenta de substituição de entrada de configuração básica que funcionará com qualquer formato de arquivo baseado em texto.
Espero que isto ajude.
fonte