Объявление (1) и (3): в чем различия между «базовым» и веб-SDK, как они влияют на типовые хост-приложения?
Наиболее важные различия:
Элементы по умолчанию
Веб-SDK имеет различные определения и шаблоны глобализации, для которых файлы необходимо включить в опубликованное приложение.
Например, когда выЕсли у вас есть файл appsettings.json
, проекты, использующие веб-SDK, будут автоматически включать его, поскольку существуют шаблоны, которые гарантируют, что файлы .config
, .json
и все файлы в папке wwwroot
являются частью выходных данных публикации.См. исходный код MSBuild на GitHub для этих шаблонов .
Если у вас общий хост и вы не используете Web SDK, вам может потребоваться добавить код в файл csproj, чтобы указатькакие файлы копировать в каталог публикации (или использовать IDE для изменения параметра «копировать в каталог вывода», который также включает файлы в вывод публикации, но также копирует их в вывод сборки):
<ItemGroup>
<None Update="*.json" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>
Логика веб-публикации
Еще одной важной частью Web SDK является то, что он содержит логику развертывания для веб-приложений.
Если вы планируетеиспользуйте профили публикации (.pubxml
файлы) или внедрите их в Azure или файловые системы с помощью MSBuild / MSDeploy, вам понадобится эта логика публикации.
Ad (2): какой SDK использовать для классабиблиотеки?
Для максимальной совместимости при публикации публичных библиотек (например, через NuGet) используйте базовый SDK и ссылайтесь на отдельные пакеты с минимально возможной версией - например, 2.1.0 / 2.1.1.
Если вы разрабатываете библиотеку классов, содержащую бритвенные представления, вам нужно использовать Microsoft.NET.Sdk.Razor
SDK для получения бритвенных инструментов (например, при использовании шаблона dotnet new razorclasslib
).
Для библиотек и тестовых проектов, гдевы хотите использовать ту же ссылку на метапакет, что и в приложении, на данный момент все немного сложнее, но будет лучше:
Для инструментов ASP.NET Core 2.1 (!) (CLI 2.1. *)Я предлагаю использовать не-веб-SDK для библиотек классов и использовать версию 2.1.1 этого пакета.Никогда не обновляйте его, даже если NuGet предлагает вам обновление.
Для тестовых проектов с инструментами 2.1 (!) (CLI 2.1. *), Это немного по-другому и сложно, см. Интеграцияи модульные тесты больше не работают на ASP.NET Core 2.1, который не может найти сборки во время выполнения
Начиная с версии 2.2 (CLI 2.2.100+), пакет без версии ссылается на ASP.NET Coreметапакеты перемещаются в базовый SDK, поэтому вы можете разрабатывать библиотеки и тестировать проекты для ASP.NET Core 2.1 и 2.2 с помощью «core» SDK (при условии, что вы используете инструменты 2.2.100+) с использованием ссылок на пакеты без версии:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
В .NET Core / ASP.NET Core 3.0 вы сможете ссылаться на каркас с помощью нового механизма (веб-SDK не требуется):
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>