Проект в Dotnet project system - это .csproj
файл, который описывает единицу сборки.
Project type ID
Все проекты в солюшене имеют определённый тип, этот тип описывается GUID’ом в .sln файле. Список известных ID есть на GitHub’е - https://github.com/JamesW75/visual-studio-project-type-guid.
File format
Существует два формата их описания. Первый формат был создан для .NET Framework. Этот формат можно опознать по объявлению Project ноды:
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Этот формат считается устаревшим. И вместе с .NET Core был добавлен новый формат, который называют SDK-style:
<Project Sdk="Microsoft.NET.Sdk">
Новый формат позиционировался как замена, поэтому все они имел схожий набор возможностей. Но поведение у них отличалось. Например, в старом формате записи требуется явно указывать все файлы, которые нужно скомпилировать. А вместе с выходом SDK-style появилось и стало использоваться по умолчанию свойство EnableDefaultItems, которое автоматически добавляло все *.cs файлы в проект и в процесс компиляции.
Properties
Properties позволяют переопределять стандартные значения настроек проектов. Например, такая запись позволяет переопределить путь, куда будет сохраняться результат компиляции:
EnableDefaultItems
EnableDefaultItems позволяет регулировать автоматическое добавление лежащих в директоири файлов в проект.
true
(дефолтное значение в SDK-style проектах) добавляет в проект все файлы, которые находятся в директории проекта (за исключением bin и obj директорий).false
(дефолтное значение для старого формата проектов) не добавляет автоматически файл. Это значит, что для того, чтобы файл с кодом попал в проект и компилировался, его нужно явно указать в .csproj файле.
Items
Item’ы - это свойства, которые являются списком элементов, которые передаются билд системе для сборки. Обычно, это одно из:
- Список
.cs
файлов, которые нужно скомпилировать (<Compile Include = "Program.cs"/>
) - Список нюгет пакетов, которые подключены в проект (
<PackageReference Include="System.Text.Json" />
) - Список ссылок между проектами (
<ProjectReference Include="..\OtherProject\OtherProject.csproj" />
)
Запись вида <PackageReference Include=...>
можно интерпретировать как “Добавить в список нюгет пакетов ещё одно значение”. Item’ы указываются под ItemGroup нодой: