Definições de configuração do Runtime do .NET
O .NET 5+ (incluindo versões do .NET Core) oferece suporte ao uso de arquivos de configuração e variáveis de ambiente para configurar o comportamento de aplicativos .NET em tempo de execução.
Observação
Os artigos desta seção dizem respeito à configuração do próprio Runtime do .NET. Se você estiver migrando para o .NET Core 3.1 ou posterior e procurando uma substituição para o arquivo app.config, ou se quiser apenas uma maneira de usar valores de configuração personalizados no seu aplicativo .NET, consulte a classe Microsoft.Extensions.Configuration.ConfigurationBuilder e Configuração no .NET.
Usar essas configurações é uma opção interessante se:
- Você não é proprietário nem controla o código-fonte de um aplicativo e, portanto, não consegue configurá-lo programaticamente.
- Várias instâncias do aplicativo são executadas ao mesmo tempo em um único sistema e você quer configurar cada uma delas para obter desempenho ideal.
O .NET fornece os seguintes mecanismos para configurar o comportamento do runtime do .NET:
Dica
A configuração de uma opção usando uma variável de ambiente aplica a definição a todos os aplicativos .NET. A configuração de uma opção no arquivo runtimeconfig.json ou de projeto aplica a definição somente a esse aplicativo.
Alguns valores de configuração também podem ser definidos programaticamente com a chamada do método AppContext.SetSwitch.
Os artigos desta seção da documentação são organizados por categoria; por exemplo, depuração e coleta de lixo. Quando for o caso, as opções de configuração serão mostradas para arquivos runtimeconfig.json, propriedades MSBuild, variáveis de ambiente e, para referência cruzada, arquivos app.config para projetos .NET Framework.
runtimeconfig.json
Quando um projeto é criado, um arquivo [appname].runtimeconfig.json é gerado no diretório de saída. Se existir um arquivo runtimeconfig.template.json na mesma pasta que o arquivo de projeto, todas as opções de configuração que ele contém serão inseridas no arquivo [appname].runtimeconfig.json. Se você estiver criando o aplicativo por conta própria, coloque as opções de configuração no arquivo runtimeconfig.template.json. Se você estiver apenas executando o aplicativo, insira-o diretamente no arquivo [appname].runtimeconfig.json.
Observação
- O arquivo [appname].runtimeconfig.json será substituído em builds subsequentes.
- Se o
OutputType
do aplicativo não forExe
e você quiser que as opções de configuração sejam copiadas de runtimeconfig.template.json para [appname].runtimeconfig.json, defina explicitamenteGenerateRuntimeConfigurationFiles
comotrue
no seu arquivo de projeto. No caso de aplicativos que exigem um arquivo runtimeconfig.json, o padrão dessa propriedade étrue
.
Especifique as opções de configuração de runtime na seção configProperties dos arquivos runtimeconfig.json. Esta seção tem o formulário:
"configProperties": {
"config-property-name1": "config-value1",
"config-property-name2": "config-value2"
}
Exemplo, arquivo [appname].runtimeconfig.json
Se você estiver colocando as opções no arquivo JSON de saída, aninha-as sob a propriedade runtimeOptions
.
{
"runtimeOptions": {
"tfm": "netcoreapp3.1",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "3.1.0"
},
"configProperties": {
"System.GC.Concurrent": false,
"System.Threading.ThreadPool.MinThreads": 4,
"System.Threading.ThreadPool.MaxThreads": 25
}
}
}
Exemplo, arquivo runtimeconfig.template.json
Se você estiver colocando as opções no arquivo JSON de modelo, omita a propriedade runtimeOptions
.
{
"configProperties": {
"System.GC.Concurrent": false,
"System.Threading.ThreadPool.MinThreads": "4",
"System.Threading.ThreadPool.MaxThreads": "25"
}
}
propriedades MSBuild
Algumas opções de configuração de runtime podem ser definidas usando as propriedades MSBuild no arquivo .csproj ou .vbproj de projetos .NET Core no estilo SDK. As propriedades MSBuild têm precedência sobre as opções definidas no arquivo runtimeconfig.template.json.
Aqui está um exemplo de arquivo de projeto no estilo SDK com propriedades MSBuild para configuração do comportamento em tempo de execução:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
<ThreadPoolMinThreads>4</ThreadPoolMinThreads>
<ThreadPoolMaxThreads>25</ThreadPoolMaxThreads>
</PropertyGroup>
</Project>
As propriedades MSBuild para configuração do comportamento em tempo de execução são observadas nos artigos individuais de cada área, por exemplo, coleta de lixo. Eles também estão listados na seção Configuração do runtime da referência de propriedades MSBuild para projetos no estilo SDK.
Variáveis de ambiente
Variáveis de ambiente podem ser usadas para fornecer algumas informações de configuração de runtime. A configuração de uma opção de tempo de execução com o uso de uma variável de ambiente aplica a definição a todos os aplicativos .NET. Em geral, os botões de configuração especificados como variáveis de ambiente têm o prefixo DOTNET_.
Observação
O .NET 6 usa o prefixo DOTNET_
como padrão em vez de COMPlus_
para variáveis de ambiente que configuram o comportamento de tempo de execução do .NET. No entanto, o prefixo COMPlus_
continuará funcionando. Se você estiver usando uma versão anterior do runtime do .NET, ainda deverá usar o prefixo COMPlus_
para variáveis de ambiente.
Você pode definir variáveis de ambiente no Painel de Controle do Windows, na linha de comando ou programaticamente, chamando o método Environment.SetEnvironmentVariable(String, String) em sistemas baseados no Windows e no Unix.
Os exemplos a seguir mostram como definir uma variável de ambiente na linha de comando:
# Windows
set DOTNET_GCRetainVM=1
# Powershell
$env:DOTNET_GCRetainVM="1"
# Unix
export DOTNET_GCRetainVM=1