Насколько важна глобальная папка global.json и src?
В VS 2015, когда вы создаете новое приложение MVC 6.0, используя этот подход:
File-->New-->Project-->ASP.NET Web Application-->ASP.NET 5 Preview Templates
В результате на диске создается следующая файловая структура:
- Артефакты
- ЦСИ
- MyProject.sln
- global.json
Вместо этого, если я решил сначала создать пустое решение следующим образом:
File-->New-->Project-->Other Project Types-->Visual Studio Solutions-->Blank Solution
И начните добавлять в это решение новый проект веб-приложения ASP.NET; вы получаете файловую структуру, в которой не имеет файла global.json
и нет src
.
Согласно документации , файл global.json используется для настройки решения в целом. Он включает только два раздела, проекты и sdk по умолчанию.
Свойство projects
обозначает, какие папки содержат исходный код для решения. По умолчанию структура проекта помещает исходные файлы в папку src, позволяя размещать артефакты в папке соседа, что упрощает исключение таких вещей из исходного элемента управления.
Свойство sdk
указывает версию DNX (.NET Execution Environment), которую Visual Studio будет использовать при открытии решения. Его набор здесь, а не в project.json, чтобы избежать сценариев, в которых различные проекты в рамках решения нацелены на разные версии SDK.
Вопрос 1)
Как уже упоминалось выше, если я сначала хочу создать пустое решение, у меня не будет файла global.json
.
Не имеет ли файл global.json
влияет на поведение приложений в любой форме или форме? Например, когда я развертываю или взаимодействую с артефактами сборки?
Вопрос 2)
Если это имеет значение, тогда я должен вручную создать этот global.json
файл?
Вопрос 3)
На момент написания статьи, существует ли рекомендуемый подход для создания многоуровневого приложения в ASP.NET 5?
Должен ли я сначала создать проект MVC и начать добавлять библиотеки классов в проект?
или
Должен ли я сначала начать с создания пустого решения и начать добавлять библиотеки классов и веб-приложения к решению (зная, что у меня не будет файла global.json
или папки src
)?
Ответы
Ответ 1
Как вы уже отмечали, это, по-видимому, новый способ создания решений при настройке ASP.NET 5. Файл global.json указывает некоторые параметры уровня решения. В частности, он определяет настройки времени исполнения DNX.
Я видел два подхода к структуре папок src/test. Если вы посмотрите на то, что делает команда MVC, они включают в себя папки src/test в корне репозитория. Во многих проектах, например, в Github есть каталог src в корне. Таким образом, пока вы в порядке с вашими файлами global.json и решения в корне вашего проекта, он, похоже, хорошо согласуется с существующими практиками.
Если вы посмотрите, что делает команда .NET с .NET 5 Core Framework, вы увидите аналогичную модель, хотя без файла global.json. Многие из их библиотек имеют подкаталоги src и tests.
Я собираюсь попытаться сфокусировать свои проекты после того, что команда MVC делает пока, пока я не получу лучшее представление о .NET 5, DNX и остальном. Он накладывает определенную структуру на ваши проекты, но тогда также были VS 2013 и .NET 4.5.
Ответ 2
Папки src
, test
и т.д. позволяют группировать проекты по типу. Это помогает поддерживать поддерживаемое решение при большом количестве проектов. Ниже приведен пример различных типов проектов.
В Основные принципы разработки ASP.NET: "По умолчанию ссылки на проект-проект должны быть папками для совместного использования. Использование global.json
файл позволяет решить задачу указать нестандартные местоположения для поиска ссылок."
Чтобы подвести итог, если у вас много проектов, вы можете группировать их по типам в папки и использовать global.json
, чтобы проекты из одной группы ссылались на них в другой.
Ответ 3
1) Да, для меня у меня также была эта проблема, и я начал с чистого решения. Тогда у моих проектов были проблемы, связанные друг с другом.
2) Для меня это не сработало без global.json. Вы также должны убедиться, что файл решения правильно указывает на все, например global.json.
Проекты не строились и не нашли друг друга для меня иначе.
3) Чтобы получить все работоспособность, я сначала создал проект ядра mvc, чтобы получить файл global.json. Затем я переименовал папку scr в applicationname.web. Обязательно измените файл решения соответствующим образом, чтобы он не указывал неправильно. Также вы должны обновить файл project.json.
Таким образом, все, что я хотел, как пустое решение, как вы, я создал проект по умолчанию, а затем изменил его так, как я этого хотел, что сработало для меня.
Я создам свое текущее приложение с помощью Onion Architeture в качестве ориентира. Я не вижу проблемы с этим ядром. Это также означает, что я буду строить IoC в другом проекте (возможно, с именем infrastructure.IoC), чтобы мой веб-проект не содержал ссылок на проекты, содержащие реализации интерфейсов, о которых веб не должен знать.
Кроме того, если у вас все еще есть проблемы, у меня на самом деле возникли проблемы с локальной сборкой и ссылкой, потому что у меня был resharper, и я отключил это, тогда проблемы с ссылкой между проектами исчезли, и я смог успешно сработать.