Я работаю над проектом, созданным с использованием Visual Studio 2017 и шаблона по умолчанию «Asp.NET Core + Angular».
Проект работает корректно, но через некоторое время работы над ним мне стало любопытно и захотелось узнать, как именно VS обрабатывает такие проекты.
Итак, я открыл файл .csproj
и должен сказать, что не понимаю логики или причины всех различных элементов <ItemGroup>
. Я суммировал свои сомнения на следующем изображении:
Кто-нибудь может пролить свет на мои вопросы?
@MartinUllrich: Я действительно единственный человек, работающий над этим проектом. Я никогда не использовал опцию «исключить из проекта»… однако я удалял/перемещал элементы в проекте, перетаскивая их в Visual Studio.
Итак, после некоторых исследований я пришел к выводу, что почти все элементы на скриншоте, который я разместил, бесполезны.
Кажется, что они создаются Visual Studio, когда вы удаляете/перемещаете элементы внутри IDE, а затем просто остаются там, накапливаясь. Это похоже на то, что VS явно «заносит в черный список» элементы, если вы перемещаете/удаляете их с помощью обозревателя решений, в то время как этого не происходит, если вы просто перемещаете/удаляете файлы вручную с диска.
После некоторого тестирования я пришел к такому выводу: единственные важные записи на скриншоте выше — это те, в которых упоминается SpaRoot
(папка, в которой находится исходный код приложения Angular).
Если я правильно понял, первая запись:
<Content Remove = "$(SpaRoot)**" />
Удаляет всю папку SpaRoot из процесса публикации, поэтому она не будет включена в окончательные распространяемые файлы. Это имеет смысл, потому что эта папка будет скомпилирована через npm во время процесса публикации в другой каталог (конец файла проекта, не показанный на моем снимке экрана). Поэтому мы не хотим включать его содержимое в основной этап компиляции, так как это было бы бесполезно.
Вторая запись:
<None Include = "$(SpaRoot)**" Exclude = "$(SpaRoot)node_modules\**" />
говорит, что папка SpaRoot
является «частью проекта» (должна отображаться в обозревателе решений VS), но не играет роли в компиляции (по-видимому, это то, что означает элемент None
). Однако элемент исключает подпапку node_modules
, поэтому он не отображается в обозревателе решений, что имеет смысл.
Вы единственный, кто работает над этим проектом? В частности, элементы, перечисляющие действия «Удалить», обычно генерируются вручную при выборе папок «исключить из проекта» или вручную изменяется тип элемента. В чистом проекте этих элементов нет.