Параметры конфигурации среды выполнения .NET

.NET Core 5 и более поздних версий (включая версии .NET Core) поддерживает использование файлов конфигурации и переменных среды для настройки поведения приложений .NET во время выполнения.

Примечание

Статьи в этом разделе касаются настройки среды выполнения .NET. Если вы выполняете миграцию на .NET Core 3,1 или более поздней версии и ищете замену файла app.config или если вы просто хотите использовать пользовательские значения конфигурации в приложении .NET, ознакомьтесь с классом и конфигурацией в .NET.

Использование этих параметров является привлекательным вариантом, если:

  • Вы не владеете исходным кодом приложения или не можете управлять им, поэтому вы не можете задать соответствующие настройки программным способом.
  • Вы одновременно запускаете несколько экземпляров приложения в одной системе и хотите настроить оптимальную производительность для каждого экземпляра.

.NET предоставляет следующие механизмы настройки поведения среды выполнения .NET:

Совет

Настройка параметра с помощью переменной среды применяет этот параметр ко всем приложениям .NET. Настройка параметра в файле runtimeconfig. JSON или проекта применяет параметр только к этому приложению.

Значения некоторых параметров конфигурации также можно задать программным способом, вызвав метод AppContext.SetSwitch.

Статьи в этом разделе документации упорядочены по категориям, например, отладка и сборка мусора. В соответствующих случаях параметры конфигурации отображаются для файлов runtimeconfig.json, свойств MSBuild, переменных среды и, для перекрестных ссылок, файлов app.config для проектов .NET Framework.

runtimeconfig.json

Если проект собран, в выходном каталоге создается файл [имя_приложения].runtimeconfig.json. Если файл runtimeconfig.template.json находится в той же папке, что и файл проекта, все параметры конфигурации, которые он содержит, добавляются в файл [имя_приложения].runtimeconfig.json. Если вы самостоятельно создаете приложение, разместите все параметры конфигурации в файле runtimeconfig.template.json. Если вы только запускаете приложение, вставьте их непосредственно в файл [имя_приложения].runtimeconfig.json.

Примечание

  • Файл [имя_приложения].runtimeconfig.json будет перезаписан при последующих сборках.
  • Если OutputType приложения не имеет значение Exe и вы хотите скопировать параметры конфигурации из OutputType в Exe, необходимо явно задать для GenerateRuntimeConfigurationFiles значение true в файле проекта. Для приложений, которым требуется файл runtimeconfig.json, это свойство по умолчанию имеет значение .

Параметры конфигурации времени выполнения следует указывать в файлах runtimeconfig.json в разделе configProperties. Этот раздел имеет следующий вид:

"configProperties": {
  "config-property-name1": "config-value1",
  "config-property-name2": "config-value2"
}

Пример файла [имя_приложения].runtimeconfig.json

Если вы помещаете параметры в выходной JSON-файл, вложите их в свойство 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
    }
  }
}

Пример файла runtimeconfig.template.json

Если вы помещаете параметры в шаблон JSON-файла, опустите свойство runtimeOptions.

{
  "configProperties": {
    "System.GC.Concurrent": false,
    "System.Threading.ThreadPool.MinThreads": "4",
    "System.Threading.ThreadPool.MaxThreads": "25"
  }
}

свойства MSBuild

Некоторые параметры конфигурации времени выполнения можно задать с помощью свойств MSBuild в файле .csproj или .vbproj для проектов .NET Core типа SDK. Свойства MSBuild имеют приоритет над параметрами, заданными в файле runtimeconfig.template.json.

Ниже приведен пример файла проекта в стиле пакета SDK со свойствами MSBuild для настройки поведения во время выполнения:

<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>

Свойства MSBuild для настройки поведения во время выполнения указаны в отдельных статьях для каждой области, например сборка мусора. Они также перечислены в разделе Свойства конфигурации среды выполнения в справочнике по свойствам MSBuild для проектов SDK.

Переменные среды

Переменные среды можно использовать для предоставления некоторых сведений о конфигурации времени выполнения. При настройке параметра времени выполнения с помощью переменной среды этот параметр будет применяться ко всем приложениям .NET Core. Элементы конфигурации, указанные в качестве переменных среды, обычно имеют префикс DOTNET_ .

Примечание

.NET 6 стандартизует префикс DOTNET_ вместо COMPlus_ для переменных среды, которые настраивают поведение .NET во время выполнения. Но префикс COMPlus_ будет и дальше работать. Если вы используете предыдущую версию среды выполнения .NET, следует и дальше использовать префикс COMPlus_ для переменных среды.

Переменные среды можно определить с помощью панели управления Windows, в командной строке или программным способом, вызвав метод Environment.SetEnvironmentVariable(String, String) в Windows и системах на основе Unix.

В следующих примерах показано, как задать переменную среды в командной строке:

# Windows
set DOTNET_GCRetainVM=1

# Powershell
$env:DOTNET_GCRetainVM="1"

# Unix
export DOTNET_GCRetainVM=1

См. также раздел