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>