Перейти к основному содержимому

Справочник по конфигурациям в C#


Справочник-шпаргалка по конфигурациям в C# — типы, синтаксис, стандартная библиотека, типовые паттерны. Не заменяет пошаговое обучение. Учебный курс: раздел.

Учебные статьи: Типы данных · Работа с типами.


Справочные таблицы​

Содержание справочника​


1. .csproj — файл проекта (MSBuild)​

Файл описывает компиляцию, ссылки, пакеты и свойства сборки. Является XML-документом, совместимым с MSBuild.


1.1. Корневой элемент и базовые атрибуты​

<Project Sdk="Microsoft.NET.Sdk">
  • Sdk — указывает на SDK-проект (.NET SDK — Microsoft.NET.Sdk, веб — Microsoft.NET.Sdk.Web, для тестов — Microsoft.NET.Sdk.Test).
    • Допустимые значения:
      • Microsoft.NET.Sdk
      • Microsoft.NET.Sdk.Web
      • Microsoft.NET.Sdk.Worker
      • Microsoft.NET.Sdk.Razor
      • Microsoft.NET.Sdk.WindowsDesktop (WPF/WinForms)
      • Microsoft.NET.Sdk.BlazorWebAssembly
      • MSBuild.Sdk.Extras — для кроссплатформенных библиотек (Xamarin, UWP и т.п.)
    • Влияет на импортируемые props и targets.
    • Можно явно импортировать SDK через <Import Sdk="..." />, но это редко нужно.

1.2. <PropertyGroup> — свойства проекта​

Основные свойства (часто объединяются по Condition или Label):

СвойствоТипОписаниеЗначение по умолчанию / примечания
TargetFrameworkстрокаЦелевая платформа (одна). Для нескольких — TargetFrameworks.Например: net8.0, net7.0-windows, net6.0-android34.0. Формат: net[версия][-ОС[-версия]].
TargetFrameworksстрокаСписок через ;. Например: net6.0;net7.0;net8.0.При его наличии TargetFramework игнорируется.
OutputTypeстрокаТип выходного файла.Library, Exe, WinExe, Module, AppContainerExe, WinMdObj.
AssemblyNameстрокаИмя сборки (без расширения .dll/.exe).По умолчанию — имя проекта.
RootNamespaceстрокаКорневое пространство имён.По умолчанию — AssemblyName.
LangVersionстрокаВерсия языка C#.latest, preview, default, или явно: 10.0, 11.0, 12.0.
NullableстрокаВключение Nullable Reference Types.enable, disable, annotations, warnings.
ImplicitUsingsстрокаАвто-добавление global using из SDK.enable, disable.
NullableContextOptionsстрока[Устаревшее] — заменено Nullable.
GenerateDocumentationFileboolСоздание XML-документации.false. При true генерируется <AssemblyName>.xml.
DocumentationFileпутьЯвный путь к XML-файлу документации.Автоматически <OutputPath><AssemblyName>.xml, если не задано.
NoWarn, WarningsAsErrors, TreatWarningsAsErrorsсписок / boolУправление предупреждениями.NoWarn — через ;, например: CS1591;NU1701. TreatWarningsAsErrors приоритетнее WarningsAsErrors.
DebugTypeстрокаФормат отладочной информации.portable (по умолчанию), full, pdbonly, embedded, none.
DebugSymbolsboolГенерировать ли .pdb.true в Debug, false в Release, если не переопределено.
DeterministicboolДетерминированная сборка (стабильный MVID).true по умолчанию в SDK-проектах.
ContinuousIntegrationBuildboolПризнак CI-сборки (влияет на SourceLink, EmbedAllSources).Обычно true в CI.
EmbedAllSourcesboolВстраивать исходники в .pdb.Требует DebugType=embedded или portable + SourceLink.
PublishReadyToRunboolAOT-компиляция (R2R).Требует указания RuntimeIdentifier.
PublishSingleFileboolУпаковка в один исполняемый файл.Может конфликтовать с SelfContained=false.
SelfContainedboolВключать ли runtime в публикацию.По умолчанию true, если указан RuntimeIdentifier.
RuntimeIdentifier, RuntimeIdentifiersстрока / списокЦелевые RID (например, win-x64, linux-arm64).При RuntimeIdentifiers — мультиплатформенная публикация.
PlatformTargetстрокаЦелевая архитектура.AnyCPU (по умолчанию), x86, x64, arm64, Itanium. Влияет на JIT, но не на RID.
IsPackableboolВключать ли проект в dotnet pack.true, если есть PackageId или PackageVersion.
PackageId, PackageVersion, Authors, Description, PackageLicenseExpression, PackageProjectUrl, RepositoryUrl, RepositoryType, PackageTagsстрокаМетаданные NuGet-пакета.Обязательны только PackageId и PackageVersion для pack.
AnalysisLevelстрокаУровень анализа кода (CAxxx).latest, 5, 5.0, 6.0, 7.0, 8.0, preview. Или none.
EnforceCodeStyleInBuildboolПрименять правила из .editorconfig на уровне ошибок.false по умолчанию. Требует <AnalysisMode> или <CodeAnalysisTreatWarningsAsErrors>.
AnalysisModeстрокаНабор правил анализа.all, recommended, minimum, none. Можно уточнить: AnalysisLevel + AnalysisMode.
EnableNETAnalyzersboolВключить встроенные анализаторы .NET.true по умолчанию, начиная с .NET 5.
RestorePackagesWithLockFileboolИспользовать packages.lock.json.false. При true — фиксация версий зависимостей.
CopyLocalLockFileAssembliesboolКопировать зависимости в выходную папку (даже если не SelfContained).false — только при dotnet publish. Полезно для отладки локальных зависимостей.

Пример​
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>12.0</LangVersion>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<AnalysisLevel>8.0-recommended</AnalysisLevel>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>

1.3. <ItemGroup> — элементы проекта​

1.3.1. <PackageReference>​
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />

Доп. атрибуты:

  • Version — строка, семвер (может включать *, например 13.0.* — но не рекомендуется).
  • PrivateAssets — all, runtime, compile, contentfiles, analyzers, build, none. Определяет, что не передаётся по транзитивности.
  • ExcludeAssets: аналогично, но исключает из текущего проекта.
  • GeneratePathProperty: true — создаёт MSBuild-свойство PkgNewtonsoft_Json, указывающее на папку пакета.
  • IncludeAssets: ограничивает, какие части пакета использовать.

1.3.2. <ProjectReference>​
<ProjectReference Include="..\Shared\Shared.csproj" />

Доп. атрибуты:

  • Private: true/false — влияет на PrivateAssets при упаковке NuGet.
  • SkipGetTargetFrameworkProperties: true — отключает проверку совместимости TargetFramework.
  • GlobalPropertiesToRemove: список свойств, удаляемых при построении зависимого проекта (через ;).

1.3.3. <Reference> — ссылка на сборку (устаревшее, но допустимо)​
<Reference Include="System.Data" />
<Reference Include="MyAssembly">
<HintPath>..\lib\MyAssembly.dll</HintPath>
</Reference>
  • HintPath — путь к .dll.
  • SpecificVersion — true/false.
  • Private — копировать ли в выходную папку.

1.3.4. <Compile>, <EmbeddedResource>, <None>, <Content>​
  • Update, Remove, Include — для тонкой настройки элементов.
  • Атрибуты:
    • DependentUpon — для вложенности в IDE (.Designer.cs → .cs).
    • Link — виртуальный путь в Solution Explorer.
    • CopyToOutputDirectory — Never, Always, PreserveNewest.
    • Visible: true/false — отображать в IDE.
    • ExcludeFromSingleFile: true — исключить из PublishSingleFile.

1.3.5. <FrameworkReference> — ссылка на метапакет фреймворка​
<FrameworkReference Include="Microsoft.AspNetCore.App" />

Требуется для Microsoft.NET.Sdk.Web, но может быть явно указано.


2. Directory.Build.props и Directory.Build.targets​

Файлы для наследуемых настроек на уровне каталога.

  • Обрабатываются рекурсивно: от корня к проекту.
  • Directory.Build.props импортируется до содержимого .csproj.
  • Directory.Build.targets — после.

Пример Directory.Build.props​

<Project>
<PropertyGroup>
<LangVersion>12.0</LangVersion>
<Nullable>enable</Nullable>
<AnalysisLevel>8.0-all</AnalysisLevel>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="8.0.0" PrivateAssets="all" />
</ItemGroup>
</Project>

⚠️ Важно: файлы не наследуются через символические ссылки и не работают при сборке из другого корневого каталога (например, dotnet build /p:ProjectDir=...).


3. global.json​

Управляет версией SDK и поведением восстановления пакетов.

{
"sdk": {
"version": "8.0.100",
"rollForward": "latestPatch",
"allowPrerelease": false
},
"msbuild-sdks": {
"MSBuild.Sdk.Extras": "3.0.44"
},
"tools": {
"dotnet": "8.0.100"
}
}
КлючТипОписаниеДопустимые значения
sdk.versionстрокаТребуемая версия .NET SDK.Семвер (например, 7.0.403, 8.0.100).
sdk.rollForwardстрокаСтратегия "перекатывания" при отсутствии точной версии.disable, latestPatch, minor, latestMinor, major, latestMajor. По умолчанию — latestPatch.
sdk.allowPrereleaseboolРазрешить предварительные версии SDK.true/false.
msbuild-sdksобъектФиксация версий внешних MSBuild SDK (например, MSBuild.Sdk.Extras).Ключ — имя SDK, значение — версия.
tools.dotnetстрока(Устаревшее) — дублирует sdk.version.

Файл ищется вверх по дереву каталогов от проекта.


4. launchSettings.json — настройки запуска (отладка и CLI)​

Располагается в Properties/launchSettings.json. Используется только в среде разработки — Visual Studio, VS Code, dotnet run. Не включается в сборку (dotnet publish игнорирует его).

dotnet publish

Формат — JSON. Содержит профили (profiles), переменные окружения и параметры запуска.


4.1. Корневые секции​

{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": { ... },
"profiles": { ... }
}

iisSettings — конфигурация IIS Express (только для .Web SDK)​
ПараметрТипОписаниеПримечания
windowsAuthenticationboolВключить Windows Auth.По умолчанию false.
anonymousAuthenticationboolВключить анонимную аутентификацию.По умолчанию true.
iisExpress → applicationUrlстрокаURL для IIS Express (например, "http://localhost:5000").Можно несколько через ;.
iisExpress → sslPortintПорт для HTTPS (например, 44300).Автоматически генерирует сертификат localhost.
iis → applicationUrl, sslPort—Аналогично, но для локального IIS (редко используется).

profiles — набор сред запуска​

Ключ — имя профиля (например, "IIS Express", "MyApp"). Каждый профиль — объект со следующими полями:

ПараметрТипОписаниеДопустимые значения / примечания
commandNameстрокаКоманда запуска."Project" (запуск через dotnet run), "IISExpress", "Executable" (произвольный exe), "WSL2" (для Linux в WSL), "Docker" (требует расширение).
launchBrowserboolОткрыть браузер после запуска.Применяется только при commandName: "Project" или "IISExpress".
applicationUrlстрокаURL, передаваемый в --urls при dotnet run.Переопределяет ASPNETCORE_URLS. Пример: "https://localhost:7001;http://localhost:5001".
environmentVariablesобъектПеременные окружения.Ключ — имя (ASPNETCORE_ENVIRONMENT, DOTNET_ENVIRONMENT), значение — строка. Например: "ASPNETCORE_ENVIRONMENT": "Разработка".
dotnetRunMessagesboolВыводить ли служебные сообщения dotnet run.true/false.
executablePathстрокаПуть к исполняемому файлу (при commandName: "Executable").
commandLineArgsстрокаАргументы командной строки для executablePath.
workingDirectoryстрокаРабочая директория при запуске.По умолчанию — корень проекта.
nativeDebuggingboolВключить отладку неуправляемого кода.Требует настройки отладчика.
sqlDebuggingboolОтладка SQL (только в VS Enterprise).
remoteDebugEnabledboolУдалённая отладка (clrdbg на удалённой машине).
dockerRunCommandстрокаКоманда docker run (при commandName: "Docker").Устаревшее; предпочтительно использовать Dockerfile.

Пример профиля​

Код ITЗагрузка примера кода…

⚠️ Нюансы:

  • Изменения в launchSettings.json вступают в силу без пересборки, но могут потребовать перезапуска отладчика.
  • Переменные из environmentVariables переопределяют системные.
  • ASPNETCORE_ENVIRONMENT влияет на загрузку appsettings.{Environment}.json.

5. appsettings.json и окружения​

Файл конфигурации приложения времени выполнения. Поддерживается через Microsoft.Extensions.Configuration.


5.1. Формат и загрузка​

По умолчанию:

  1. appsettings.json
  2. appsettings.{Environment}.json (например, appsettings.Разработка.json)
  3. Переменные окружения
  4. Аргументы командной строки

Порядок — переопределение: последующие источники перекрывают предыдущие.


5.2. Поддерживаемые типы значений​

  • string, bool, int, long, double, decimal
  • Объекты (вложенные section)
  • Массивы (через [0], [1] или объекты)

Пример​

Код ITЗагрузка примера кода…


5.3. Специальные секции (интерпретируются фреймворком)​

СекцияОписаниеПримечания
LoggingНастройки логгера.Поддерживает LogLevel, Console, Debug, EventLog, ApplicationInsights.
AllowedHostsСписок разрешённых хостов для HostFiltering."*" — разрешить все. Обязательно для безопасности в production.
ConnectionStringsСтроки подключения.Доступ через Configuration.GetConnectionString("name").
KestrelКонфигурация Kestrel.Поддерживает Endpoints, Limits, Certificates.
Serilog / NLog / log4netПри наличии соответствующих провайдеров.Не встроены, но широко используются.
Azure / AWS / GoogleСекции для облачных SDK.Например, Azure:ServiceBus:ConnectionString.

5.4. Переменные окружения как источник​

  • Иерархия заменяется на __ (два подчёркивания):
    Logging__LogLevel__Default=Debug
  • Имена — case-insensitive в Windows, case-sensitive в Linux.
  • ASPNETCORE_ и DOTNET_ префиксы имеют приоритет (например, ASPNETCORE_URLS переопределяет applicationUrl из launchSettings).

6. runtimeconfig.json — конфигурация среды выполнения​

Генерируется при сборке (dotnet build) и публикации (dotnet publish). Располагается рядом с .dll: <AssemblyName>.runtimeconfig.json.

dotnet build

Содержит параметры для dotnet <app>.dll.

dotnet <app>.dll

6.1. Структура​

Код ITЗагрузка примера кода…


runtimeOptions → ключи​
КлючТипОписаниеДопустимые значения / примечания
tfmстрокаЦелевой фреймворк.Влияет на загрузку метаданных.
frameworkобъектОсновной фреймворк (для framework-dependent apps).name: Microsoft.NETCore.App, Microsoft.AspNetCore.App, Microsoft.WindowsDesktop.App. version: минимальная требуемая версия.
frameworksмассивМножественные фреймворки (редко).Например, для приложений с Microsoft.NETCore.App + Microsoft.AspNetCore.App.
rollForwardстрокаСтратегия обновления runtime.LatestPatch, Minor, LatestMinor, Major, LatestMajor, Disable. По умолчанию — Minor.
applyPatchesboolПрименять ли патчи (даже при rollForward: "Disable").Устаревшее.
configPropertiesобъектПараметры CLR и BCL.См. ниже.

configProperties — ключевые настройки CLR​
КлючТипОписаниеПо умолчанию
System.GC.ServerboolСерверный GC.true для ASP.NET, false для консольных приложений.
System.GC.ConcurrentboolПараллельная сборка мусора.true.
System.GC.RetainVMboolУдерживать память после GC (не возвращать ОС).false.
System.Threading.ThreadPool.MinThreadsintМин. число потоков в пуле.Зависит от ядер.
System.Threading.ThreadPool.MaxThreadsintМакс. число потоков.Очень большое (≈32767).
System.Globalization.InvariantboolОтключить локализацию (меньше памяти, быстрее).false.
System.Reflection.Metadata.MetadataUpdater.IsSupportedboolРазрешить hot reload.true в Debug, false в Release.
System.Runtime.Loader.DefaultContext.TrustedPlatformAssembliesстрокаЯвный список .dll (для изолированных загрузчиков).Редко используется.
Microsoft.NET.HostModel.AppHost.OptimizeAppHostboolОптимизировать apphost (self-contained).true.

⚠️ Эти параметры можно задавать:

  • через runtimeconfig.template.json (в проекте: <RuntimeHostConfigurationOption>),
  • через переменные окружения (префикс DOTNET_),
  • через аргументы dotnet (например, --runtimeconfig).

Пример runtimeconfig.template.json​
{
"configProperties": {
"System.GC.Server": true,
"System.Globalization.Invariant": true
}
}

В .csproj:

<PropertyGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.Invariant" Value="true" />
</PropertyGroup>

7. deps.json — зависимости приложения​

Генерируется при сборке (<AssemblyName>.deps.json). Содержит:

  • список всех зависимостей (включая транзитивные),
  • пути к сборкам,
  • хэши,
  • runtime и compile-временные зависимости,
  • native-библиотеки (.so, .dylib, .dll).

7.1. Структура​

{
"runtimeTarget": { "name": ".NETCoreApp,Version=v8.0", ... },
"targets": {
".NETCoreApp,Version=v8.0": {
"MyApp/1.0.0": { "runtime": { "MyApp.dll": { } } },
"Newtonsoft.Json/13.0.3": {
"runtime": { "lib/netstandard2.0/Newtonsoft.Json.dll": { } },
"compile": { "ref/netstandard2.0/Newtonsoft.Json.dll": { } }
}
}
},
"libraries": { ... }
}

7.2. Ключевые секции​

СекцияОписание
runtimeTargetЦелевая платформа и RID (если self-contained).
targetsГруппировка зависимостей по TFM/RID.
librariesМетаданные о каждой библиотеке: хэш, тип (project, package, reference), пути.
runtimesNative-зависимости по RID (например, win-x64/native/sqlite3.dll).

⚠️ Этот файл обязателен для dotnet exec и запуска framework-dependent приложений. При его отсутствии — ошибка:

Error: assembly specified in the dependencies manifest was not found...

Изменять вручную не рекомендуется — используется только для диагностики и tooling (например, dotnet store).

dotnet store

8. packages.lock.json — фиксация версий зависимостей​

Файл генерируется при первом восстановлении (dotnet restore), если в .csproj указано:

dotnet restore
<PropertyGroup>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
</PropertyGroup>

Цель — детерминированное восстановление: одинаковые версии пакетов на всех машинах и в CI.


8.1. Структура​

Код ITЗагрузка примера кода…

ПолеОписание
versionВерсия формата (на данный момент только 1).
dependenciesОбъект: ключ — TFM (например, net8.0, net7.0-windows), значение — дерево зависимостей.
typeDirect — прямая зависимость, Transitive — транзитивная.
dependencies (внутри пакета)Точный список дочерних пакетов и их версий.

8.2. Поведение​

  • При dotnet restore:
    • Если packages.lock.json есть, NuGet строго следует ему (даже если в .csproj указана 13.*).
    • Если packages.lock.json отсутствует, он создаётся.
  • Чтобы обновить — удалите файл и выполните dotnet restore, или используйте:
dotnet restore --force-evaluate
  • Для CI рекомендуется коммитить packages.lock.json.

⚠️ Ограничения:

  • Не поддерживает динамические версии (*, latest).
  • Не влияет на PackageReference с Version="..." в .csproj — версии в .csproj и .lock должны совпадать.
  • Может конфликтовать с CentralPackageVersionManagement (CPVM).

9. nuget.config — глобальные и локальные настройки NuGet​

Файл может располагаться:

  • в корне решения (рекомендуется),
  • в ~/.nuget/NuGet/NuGet.Config (глобальный),
  • в %AppData%\NuGet\NuGet.Config (Windows),
  • в $XDG_CONFIG_HOME/NuGet/NuGet.Config или ~/.config/NuGet/NuGet.Config (Linux/macOS).

Формат — XML.


9.1. Основные секции​

Код ITЗагрузка примера кода…


9.2. Ключевые параметры​

В <config>​
КлючОписаниеПримечания
repositoryPathКаталог для packages.config (устаревшее).Не влияет на PackageReference.
globalPackagesFolderГлобальный кэш пакетов (~/.nuget/packages).Можно переопределить через NUGET_PACKAGES.
http_proxy, https_proxyПрокси для скачивания пакетов.Поддерживает аутентификацию через user:pass@host:port.
no_proxyСписок хостов без прокси (через ,).Может включать домены и CIDR-блоки.
defaultPushSourceИсточник по умолчанию для nuget push.
dependencyVersionСтратегия выбора версий при восстановлении.Lowest, HighestPatch, HighestMinor, Highest. По умолчанию — Lowest.

В <packageSources>​
  • <clear /> — сброс настроек из родительских конфигов.
  • Порядок источников важен: первое совпадение побеждает.
  • Можно использовать локальные источники: value="C:\local-packages".

В <packageSourceCredentials>​
  • Поддерживает ClearTextPassword, Password (зашифрован), ValidAuthenticationTypes.
  • Для Azure Artifacts рекомендуется использовать AzureDevOpsCredentialProvider.

Прочие секции​
СекцияНазначение
<solution><add key="disableSourceControlIntegration" value="true" /> — отключить .nuget в TFS.
<bindingRedirects>Автогенерация app.config-перенаправлений (для legacy).

10. packages.config — устаревшая модель управления пакетами​

Использовалась до .NET Core. Хранит все зависимости в одном XML-файле.


10.1. Структура​

<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net48" />
<package id="Microsoft.AspNet.Mvc" version="5.2.9" targetFramework="net48" />
</packages>
АтрибутОписание
idИмя пакета.
versionТочная версия.
targetFrameworkЦелевой фреймворк (например, net48, net461).
allowedVersionsОграничение обновлений (например, [13.0,14.0)).

10.2. Недостатки (почему устарела)​

  • Нет транзитивных зависимостей — все зависимости дублируются.
  • Нет централизованного управления версиями.
  • Зависимости копируются в packages/, увеличивая размер репозитория.
  • Не поддерживает dotnet CLI (только nuget.exe и msbuild legacy).
  • Не совместима с PackageReference.

Конвертация:

nuget.exe update MyProject.csproj -self

11. project.assets.json — промежуточный файл восстановления​

Генерируется в obj/project.assets.json при dotnet restore. Используется MSBuild и dotnet build для:

dotnet restore
  • разрешения зависимостей,
  • формирования deps.json,
  • копирования сборок в выходную папку.

11.1. Структура (сокращённо)​

{
"version": 3,
"targets": { ... },
"libraries": { ... },
"projectFileDependencyGroups": {
"net8.0": [ "Newtonsoft.Json >= 13.0.3" ]
},
"packageFolders": {
"C:\\Users\\user\\.nuget\\packages\\": {}
}
}
СекцияОписание
targetsЗависимости по TFM/RID. Аналог deps.json, но до упаковки.
librariesМетаданные пакетов: тип, хэш, версия, зависимости.
projectFileDependencyGroupsГруппировка по TFM: какие PackageReference были в .csproj.
packageFoldersКаталоги с пакетами (глобальный кэш, fallback folders).

⚠️ Этот файл не коммитится (в .gitignore по умолчанию).
Если повреждён — пересоздайте артефакты restore:

rm -rf obj bin
dotnet restore

12. .nuspec — манифест NuGet-пакета​

Файл XML, описывающий пакет. Может генерироваться автоматически из .csproj, либо создаваться вручную.


12.1. Структура (минимальная)​

Код ITЗагрузка примера кода…


12.2. Элементы <metadata>​

ЭлементОбязательныйОписаниеЗаметки
id✅Уникальное имя пакета.Должно совпадать с PackageId.
version✅Версия пакета (семвер).Может содержать метки: 1.0.0-alpha.
authors✅Авторы.Разделитель — ,.
description✅Описание (до 4000 символов).Поддерживает Markdown в некоторых клиентах.
license✅ (или licenseUrl)Лицензия.Предпочтительно type="expression" (SPDX: MIT, Apache-2.0).
projectUrl❌Ссылка на проект.Отображается в NuGet.org.
icon❌Путь к иконке в пакете (например, icon.png).Должен быть в <files>.
readme❌readme.md в корне пакета.Отображается на NuGet.org.
repository❌Тип и URL репозитория.Поддерживает git, svn, hg.
tags❌Ключевые слова (через пробел).Улучшает поиск.
releaseNotes❌Изменения в версии.Поддерживает Markdown.
copyright❌Уведомление об авторских правах.Например: © 2025 Timur Tagirov.

12.3. <files> — содержимое пакета​

  • target — папка в распакованном пакете:
    • lib/{tfm}/ — сборки времени выполнения,
    • ref/{tfm}/ — reference-сборки (для компиляции),
    • runtimes/{rid}/native/ — native-библиотеки,
    • content/ — файлы, копируемые в проект (устаревшее),
    • build/ — .targets/.props для MSBuild,
    • analyzers/dotnet/cs/ — анализаторы.

Пример структуры пакета​
MyLib.1.0.0.nupkg
├── lib/
│ └── net8.0/
│ └── MyLib.dll
├── ref/
│ └── net8.0/
│ └── MyLib.dll
├── build/
│ └── MyLib.targets
├── icon.png
├── README.md
└── MyLib.nuspec

13. Дополнительные параметры в .csproj для публикации и упаковки​

13.1. dotnet publish — параметры публикации​

dotnet publish
СвойствоОписаниеПример
PublishDirЦелевая папка./p:PublishDir=./out
PublishReadyToRunAOT-компиляция (R2R).true
PublishSingleFileОдин файл.true
IncludeNativeLibrariesForSelfExtractВключить native-библиотеки в single-file.true (по умолчанию при PublishSingleFile=true)
SelfContainedВключить runtime.true/false
RuntimeIdentifierЦелевой RID.win-x64, linux-arm64
PublishTrimmedОбрезка неиспользуемого кода (linking).true (осторожно: может сломать reflection)
TrimModecopyused, link.
SuppressTrimAnalysisWarningsПодавить предупреждения обрезки.true
DebugTypeТип отладки в publish.embedded — встроить .pdb в .dll
ContinuousIntegrationBuildВключить SourceLink и детерминированность.true

13.2. dotnet pack — параметры упаковки​

СвойствоОписание
IsPackableВключать ли в pack.
PackageOutputPathКуда класть .nupkg.
IncludeSymbolsГенерировать .snupkg.
SymbolPackageFormatsnupkg, symbols.nupkg.
EmbedUntrackedSourcesВстраивать исходники без истории git.
EmbedAllSourcesВстраивать все исходники.
AllowedOutputExtensionsInPackageBuildOutputFolderКакие расширения включать в build/. Например: .dll;.pdb;.xml.

Типовые команды CLI:

dotnet publish -c Release -r linux-x64 --self-contained true \
-p:PublishSingleFile=true -p:PublishTrimmed=true
dotnet pack -c Release -o ./nupkgs
dotnet restore --force-evaluate

14. app.config / web.config — конфигурация .NET Framework​

Файл app.config переименовывается в <AssemblyName>.exe.config при сборке. Для ASP.NET — web.config.


14.1. Корневая структура​

Код ITЗагрузка примера кода…


14.2. <configSections> — объявление секций​

Обязательно первым дочерним элементом <configuration>.


Элемент <section>​
<section
name="mySection"
type="System.Configuration.NameValueSectionHandler"
allowLocation="true"
requirePermission="false" />
АтрибутОписание
nameИмя секции в конфигурации.
typeПолное имя класса + сборка (или встроенного обработчика).
allowLocationМожно ли использовать <location> вокруг секции.
requirePermissionТребуются ли права администратора для чтения.

Встроенные обработчики секций​
ТипОписаниеФормат секции
System.Configuration.AppSettingsSectionДля <appSettings><add key="K" value="V" />
System.Configuration.NameValueSectionHandlerПростой key-value<add key="K" value="V" />
System.Configuration.DictionarySectionHandlerТо же, но возвращает IDictionary<add key="K" value="V" />
System.Configuration.SingleTagSectionHandlerОдин тег с атрибутами<my attr1="v1" attr2="v2" />
System.Configuration.IgnoreSectionHandlerИгнорировать секциюЛюбое содержимое

<sectionGroup> — группировка секций​
<sectionGroup name="applicationSettings"
type="System.Configuration.ApplicationSettingsGroup, System">
<section name="MyApp.Properties.Settings"
type="System.Configuration.ClientSettingsSection, System" />
</sectionGroup>

14.3. Системные секции​

<startup>​
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
Элемент/атрибутОписание
useLegacyV2RuntimeActivationPolicyРазрешить загрузку смешанных сборок (mixed-mode) под CLR 4.
supportedRuntime → versionv2.0.50727, v4.0.30319.
supportedRuntime → sku.NETFramework,Version=v4.8, .NETCoreApp,Version=v3.1 (редко).

<runtime>​

Контролирует поведение CLR.


<assemblyBinding>​
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json"
publicKeyToken="30ad4fe6b2a6aeed"
Культура="neutral" />
<bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
<codeBase version="13.0.0.0" href="lib/Newtonsoft.Json.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
ЭлементОписание
assemblyIdentityУникальный идентификатор сборки (имя + publicKeyToken).
bindingRedirectПеренаправление версий. Формат: A-B → C.
codeBaseЯвный путь к .dll (для сборок вне GAC).
publisherPolicyapply="no" — игнорировать политики издателя.

Прочие параметры <runtime>​
ПараметрОписаниеЗначение
<gcServer enabled="true" />Серверный GC.true/false.
<gcConcurrent enabled="true" />Параллельный GC.
<legacyUnhandledExceptionPolicy enabled="false" />Обратная совместимость с .NET 1.1.
<loadFromRemoteSources enabled="true" />Загрузка сборок из сети (UNC, HTTP).Требуется для Assembly.LoadFrom("//server/app.dll").
<generatePublisherEvidence enabled="false" />Отключить проверку подписи (ускоряет запуск).

<System.web> — настройки ASP.NET​
СекцияОписание
compilationdebug="true", targetFramework="4.8", batch="true".
authenticationmode="Windows", mode="Forms".
authorization<allow users="*"/>, <deny users="?" />.
sessionStatemode="InProc", mode="StateServer", mode="SQLServer".
httpRuntimemaxRequestLength="4096", executionTimeout="110".
customErrorsmode="RemoteOnly", <error statusCode="404" redirect="404.htm" />.
pagesviewStateEncryptionMode="Always", controlRenderingCompatibilityVersion="4.8".

<System.Data>​
<System.Data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider"
invariant="System.Data.SQLite"
description=".NET Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
</System.Data>

Используется для регистрации ADO.NET-провайдеров.


15. Трансформации конфигурации (web.debug.config, web.release.config)​

Механизм Visual Studio для изменения web.config при публикации.


15.1. Синтаксис трансформаций​

АтрибутОписаниеПример
xdt:Transform="Replace"Полная замена элемента.<compilation xdt:Transform="Replace" debug="false" />
xdt:Transform="Insert"Вставка элемента.<add key="Feature" value="On" xdt:Transform="Insert" />
xdt:Transform="Remove"Удаление элемента.<add key="DebugOnly" xdt:Transform="Remove" />
xdt:Transform="RemoveAll"Удалить все совпадения.<add xdt:Transform="RemoveAll" xdt:Locator="XPath(//add[@key='Temp'])" />
xdt:Transform="SetAttributes"Замена атрибутов.<compilation xdt:Transform="SetAttributes" debug="false" />
xdt:Locator="Match(key)"Поиск по атрибуту key.<add key="LogLevel" xdt:Locator="Match(key)" xdt:Transform="SetAttributes" value="Warn" />

15.2. Автоматические трансформации (VS)​

  • web.debug.config → применяется при сборке в Debug,
  • web.release.config → при Release,
  • web.{Profile}.config → при публикации с профилем Profile.

⚠️ Не работает с dotnet publish (только MSBuild + VS).

dotnet publish

Альтернатива в .NET Core+: appsettings.{Environment}.json.


16. Внешние файлы конфигурации​

16.1. configSource​

Выносит секцию в отдельный файл:

<appSettings configSource="appSettings.secret.config" />
  • Файл должен содержать только содержимое секции, без <appSettings>.
  • Путь — относительно .config.
  • Файл не может находиться в другом каталоге (только рядом или глубже).

16.2. file (только для <appSettings>)​

Аналогично, но позволяет объединять значения:

<appSettings file="local.overrides.config">
<add key="BaseUrl" value="https://prod.com" />
</appSettings>
  • local.overrides.config может переопределять BaseUrl и добавлять новые ключи.
  • Используется для локальных переопределений без коммита.

17. machine.config​

Глобальный конфиг для всех приложений на машине. Расположение:

  • Windows:
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config

  • Linux/macOS (mono):
    /etc/mono/4.0/machine.config

Содержит:

  • <configSections> по умолчанию,
  • <System.web> для ASP.NET,
  • <System.Data> с провайдерами,
  • <runtime> с политиками по умолчанию.

⚠️ Изменение требует прав администратора.
Редко редактируется напрямую — предпочтительно переопределять в app.config.


18. Settings.settings и userSettings​

Visual Studio генерирует Properties/Settings.settings, который компилируется в app.config.


18.1. appSettings и userSettings​

КритерийappSettingsuserSettings
ХранениеВ app.configВ %LocalAppData%\Company\Product\version\user.config
ДоступТолько чтение (ConfigurationManager.AppSettings)Чтение/запись (Properties.Settings.Default.Key = value;)
ОбластьПриложениеПользователь + машина
ШифрованиеНетПоддерживается через protectedData

18.2. userSettings в app.config​

<userSettings>
<MyApp.Properties.Settings>
<setting name="WindowSize" serializeAs="String">
<value>800,600</value>
</setting>
<setting name="Theme" serializeAs="String">
<value>Dark</value>
</setting>
</MyApp.Properties.Settings>
</userSettings>

При изменении и вызове Settings.Default.Save(), значения пишутся в user.config.


19. WCF-конфигурация (System.serviceModel)​

19.1. Структура​

Код ITЗагрузка примера кода…


19.2. Ключевые узлы​

УзелНазначение
servicesОпределение хостинга сервисов.
bindingsНастройка транспорта (HTTP, TCP, Named Pipes).
behaviorsДоп. поведение (метаданные, трассировка, throttling).
clientКонфигурация клиентских прокси.
diagnosticsВключение WCF-трассировки (<messageLogging logEntireMessage="true" />).

20. app.manifest — манифест приложения Windows​

Контролирует:

  • UAC-поведение,
  • DPI-awareness,
  • поддержку Windows тем,
  • Visual Styles.

20.1. Подключение​

В .csproj:

<ApplicationManifest>app.manifest</ApplicationManifest>

20.2. Пример​

Код ITЗагрузка примера кода…

ПараметрОписание
level="asInvoker"Запуск без повышенных прав.
level="requireAdministrator"Требовать права админа.
level="highestAvailable"Максимальные доступные права.
dpiAware="true/pm"Per-Monitor DPI Awareness (устаревший).
dpiAwareness="PerMonitorV2"Современный режим (Windows 10 1703+).

21. Дополнительно — CPVM и анализ​

21.1. Directory.Packages.props — централизованное управление версиями​

Файл в корне репозитория для CentralPackageVersionManagement.

<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>

<ItemGroup>
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="8.0.0" />
</ItemGroup>
</Project>

В .csproj:

<PackageReference Include="Newtonsoft.Json" />
<!-- версия берётся из Directory.Packages.props -->

Требует:

  • <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>,
  • NuGet >= 6.2 / .NET SDK >= 6.0.300.

21.2. FxCopRules.ruleset — устаревший анализ​

Файл правил для Microsoft.CodeAnalysis.FxCopAnalyzers (до .NET 5).

<RuleSet Name="My Rules" ToolsVersion="16.0">
<Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
<Rule Id="CA1001" Action="Warning" />
<Rule Id="CA1822" Action="None" /> <!-- отключить -->
</Rules>
</RuleSet>

В .csproj:

<CodeAnalysisRuleSet>MyRules.ruleset</CodeAnalysisRuleSet>

⚠️ В .NET 5+ заменён на AnalysisLevel, AnalysisMode, .editorconfig.


Основа по протоколу

Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.


В подборках​

Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:

Справочники — Справочник по F#, Справочник по LINQ, Документация и инструменты Java (Microsoft), Справочник по ASP.NET, Справочник по Java, Справочник по C#.