Criando arquivos de configuração para ambientes de release e debug .net com SlowCheetah
Tags: csharp, dotnet, environment, slowcheetah
Published: 2021-04-22 00:13:02

Ao desenvolver uma aplicação do tipo Windows Services, Windows Forms ou Console Application nos deparamos com 2 tipos de ambientes de desenvolvimento: **Release** e **Debug**.

Por padrão essas aplicações contém o seguinte arquivo de configuração: **App.config**

![App.config](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nub2w9fny3ff3cqi8qua.PNG)

Para criar os arquivos de configuração por ambiente será necessário adicionar a extensão *SlowCheetah* no seu Visual Studio

![Extension SlowCheetah](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qam16i7hegfewt3t4cx4.PNG)

Em seguida instalar o pacote do **SlowCheetah** no seu projeto

![Referencias](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/18288q0zqa7pajcz52vx.PNG)

![Gerencia pacotes Nuget](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ec51jhnapbzcvbfvqem8.png)

![Instala SlowCheetah](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6hw62mi330duz2r5lfnc.png)

![Confirma instalacao](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ql6hb5nrxe35ny2he3hl.PNG)

Após concluir a instalação será adicionado a referência dentro do arquivo **packages.config** e caso você ainda não tenha o arquivo o mesmo será gerado de forma automática.

![Package](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d7mq14e6cf80fy663w6m.PNG)

Com tudo instalado, clique em cima do **App.config** com o botão direito e será exibido a opção de adicionar transformação

![Add Transform](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kp7ewdorkraros7f6lex.png)

Ao clicar nessa opção será gerado dois arquivos **App.Debug.config** e **App.Release.config**

![Arquivos de configuração por ambiente](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fex3kfkd0i9cd59t27rp.PNG)

No arquivo principal **App.Config** adicione a tag <appSettings> e dentro dela crie algumas chaves e valores correspondentes, na minha aplicação de exemplo ficou assim:

```xml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<appSettings>
		<add key="Cep" value="01001000"/>
		<add key="Formato" value="json"/>
	</appSettings>
</configuration>
```

*A minha aplicação realiza a busca de endereços a partir da [API de busca CEP](https://viacep.com.br/) passando como parâmetro o CEP e o formato de retorno*

Nos arquivos de configuração por ambiente **App.Debug.Config** e **App.Release.Config** será necessário adicionar os campos *xdt:Transform="SetAttributes"* e *xdt:Locator="Match(key)"* em toda propriedade, no meu caso ficou assim: 

**App.Release.Config**

```xml
<?xml version="1.0" encoding="utf-8"?>
<!--For more information on using transformations see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
	<appSettings>
		<add key="Cep" value="22222000" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
		<add key="Formato" value="json" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
	</appSettings>
</configuration>
```

**App.Debug.Config**

```xml
<?xml version="1.0" encoding="utf-8"?>
<!--For more information on using transformations see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
	<appSettings>
		<add key="Cep" value="77777000" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
		<add key="Formato" value="json" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
	</appSettings>
</configuration>
```

Dessa forma o compilador em tempo de execução irá trocar os valores configurados no arquivo principal por aqueles configurados no ambiente em execução.

Para realizar o teste, no Visual Studio tem a opção de selecionar o ambiente (no meu caso vou deixar o de release)

![release](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4td663em9lmuicfowdg7.PNG)

Criei o seguinte código para obter as propriedades do ambiente

```csharp
        private CEP ObtemPropriedadesDoAmbiente
        {
        get
            {
                CEP dados = new CEP();
                dados.Cep = ConfigurationManager.AppSettings["Cep"];
                dados.Formato = ConfigurationManager.AppSettings["Formato"];
                return dados;

            }
        }
```

E os dados retornados, será o que foi configurado no ambiente de release

![dados release](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m1dh7gr1ogt6j1uuccl7.jpg)

Bom, é isso pessoal!

Espero que tenham gostado e até o próximo post :)