Во время компиляции проектов создаются две директории:
- obj директория, куда сохраняется созданные при компиляции файлы
- bin директория, куда копируются результаты компиляции и необходимые для запуска проекта зависимости.
В процессе компиляции из исходного кода проекта создаётся dll. Происходит это в рамках таргета CoreCompile, где вызывается таска Csc. Одним из аргументов этой таски пеердаётся OutputAssembly - это путь, куда нужно сохранить скомпилированную dll. По умолчанию компиляция работает с obj директориями. При этом в obj директорию попадают только те файлы, которые были сгенерированы в процессе компиляции. Нет необходимости копировать туда зависимости, они указываются в csc как пути к .nuget/ или obj/ других проектов.
Запустить dll из директории obj невозможно. Чтобы собранное приложение можно было запустить выполняется копирование этой длл и всех зависимостей в директорию bin. Для этого выполняется таргет CopyFilesToOutputDirectory.
bin directory
obj directory
project.assets.json
Artifacts output
Начиная с dotnet 8, MSBuild поддерживает свойство UseArtifactsOutput
, которое влияет на то, куда сохраняются файлы во время сборки. Обычно директории bin и obj складываются внутри директорий проектов, но в выставленным UseArtifactsOutput
создаётся директория artifact
в корне солюшена и внутри неё под каждый проект заводится директория, где будут хранится bin и obj.
Более подробно почитать можно в документации: https://learn.microsoft.com/en-us/dotnet/core/sdk/artifacts-output.