Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начиная с .NET Core 2.0, можно упаковать и развернуть приложения в известном наборе пакетов, существующих в целевой среде. Преимущества — это более быстрое развертывание, снижение потребления дискового пространства и повышение производительности запуска в некоторых случаях.
Эта функция реализована в виде хранилища пакетов среды выполнения, который является каталогом на диске, где хранятся пакеты (обычно в /usr/local/share/dotnet/store в macOS/Linux и C:/Program Files/dotnet/store в Windows). В этом каталоге есть подкаталоги для архитектур и целевых платформ. Макет файла аналогичен тому, как ресурсы NuGet размещаются на диске:
\dotnet
\store
\x64
\netcoreapp2.0
\microsoft.applicationinsights
\microsoft.aspnetcore
...
\x86
\netcoreapp2.0
\microsoft.applicationinsights
\microsoft.aspnetcore
...
В целевом файле манифеста перечислены пакеты в хранилище пакетов среды выполнения. Разработчики могут использовать этот манифест при публикации приложения. Целевой манифест обычно предоставляется владельцем целевой рабочей среды.
Подготовка среды выполнения
Администратор среды выполнения может оптимизировать приложения для ускорения развертывания и снижения места на диске, создав хранилище пакетов среды выполнения и соответствующий целевой манифест.
Первым шагом является создание манифеста хранилища пакетов , который содержит пакеты, составляющие хранилище пакетов среды выполнения. Этот формат файла совместим с форматом файла проекта (csproj).
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="NUGET_PACKAGE" Version="VERSION" />
<!-- Include additional packages here -->
</ItemGroup>
</Project>
Пример
Следующий пример манифеста хранилища пакетов (packages.csproj) используется для добавления Newtonsoft.Json и Moq в хранилище пакетов среды выполнения:
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
<PackageReference Include="Moq" Version="4.7.63" />
</ItemGroup>
</Project>
Подготовьте хранилище пакетов среды выполнения, используя dotnet store с манифестом хранилища пакетов, средой выполнения и платформой.
dotnet store --manifest <PATH_TO_MANIFEST_FILE> --runtime <RUNTIME_IDENTIFIER> --framework <FRAMEWORK>
Пример
dotnet store --manifest packages.csproj --runtime win-x64 --framework netcoreapp2.0 --framework-version 2.0.0
Вы можете передать несколько путей манифеста хранилища целевых пакетов в одну dotnet store команду, повторив параметр и путь в команде.
По умолчанию результат выполнения команды — это хранилище пакетов в подкаталоге .dotnet/store профиля пользователя. Можно указать другое расположение с помощью --output <OUTPUT_DIRECTORY> параметра. Корневой каталог хранилища содержит целевой манифест artifact.xml файла. Этот файл можно сделать доступным для скачивания и использовать авторами приложений, которые хотят нацелиться на это хранилище при публикации.
Пример
Следующий artifact.xml файл создается после выполнения предыдущего примера. Обратите внимание, что Castle.Core это зависимость Moq, поэтому она включается автоматически и отображается в файле манифеста artifacts.xml .
<StoreArtifacts>
<Package Id="Newtonsoft.Json" Version="10.0.3" />
<Package Id="Castle.Core" Version="4.1.0" />
<Package Id="Moq" Version="4.7.63" />
</StoreArtifacts>
Публикация приложения с учетом целевого манифеста
Если на диске есть целевой файл манифеста, вы укажите путь к файлу при публикации приложения с dotnet publish помощью команды:
dotnet publish --manifest <PATH_TO_MANIFEST_FILE>
Пример
dotnet publish --manifest manifest.xml
Вы развертываете полученное опубликованное приложение в среде с пакетами, описанными в целевом манифесте. Не удалось сделать это, в результате чего приложение не удается запустить.
Укажите несколько целевых манифестов при публикации приложения, повторяя параметр и путь (например, --manifest manifest1.xml --manifest manifest2.xml). При этом приложение обрезается для объединения пакетов, указанных в целевых файлах манифеста, предоставленных команде.
При развертывании приложения с зависимостью манифеста, которая присутствует в развертывании (сборка присутствует в папке bin ), хранилище пакетов среды выполнения не используется на узле для этой сборки. Сборка папки bin используется независимо от его присутствия в хранилище пакетов среды выполнения на узле.
Версия зависимости, указанной в манифесте, должна соответствовать версии зависимости в хранилище пакетов среды выполнения. Если у вас есть несоответствие версий между зависимостью в целевом манифесте и версией, существующей в хранилище пакетов среды выполнения, и приложение не включает требуемую версию пакета в его развертывании, приложение не запускается. Исключение включает имя целевого манифеста, который запрашивал сборку хранилища пакетов среды выполнения, что помогает выявить несоответствие.
Если развертывание ограничивается при публикации, то из опубликованного результата исключаются только конкретные версии пакетов манифеста, которые вы указываете. Для запуска приложения пакеты в указанных версиях должны присутствовать на узле.
Указание целевых манифестов в файле проекта
Альтернативой указанию целевых манифестов с помощью команды dotnet publish является их указание в файле проекта в виде списка путей, разделенных точкой с запятой, под тегом <TargetManifestFiles>.
<PropertyGroup>
<TargetManifestFiles>manifest1.xml;manifest2.xml</TargetManifestFiles>
</PropertyGroup>
Укажите целевые манифесты в файле проекта, только если целевая среда для приложения хорошо известна, например для проектов .NET Core. Это не так для проектов с открытым кодом. Пользователи проекта с открытым исходным кодом обычно развертывают его в разных рабочих средах. В этих рабочих средах обычно установлены разные наборы пакетов. Вы не можете делать предположения о целевом манифесте в таких средах, поэтому рекомендуется использовать опцию --manifestdotnet publish.
неявное хранилище ASP.NET Core (только для .NET Core 2.0)
Неявное хранилище ASP.NET Core применяется только к ASP.NET Core 2.0. Мы настоятельно рекомендуем приложениям использовать ASP.NET Core версии 2.1 и выше, начиная с которого не используется неявное хранилище. ASP.NET Core 2.1 и более поздних версий использует общую платформу.
Для .NET Core 2.0 функция хранилища пакетов среды выполнения неявно используется приложением ASP.NET Core при развертывании приложения в качестве приложения, зависяющего от платформы . Цели из Microsoft.NET.Sdk.Web включают манифесты, которые ссылаются на неявное хранилище пакетов на целевой системе. Кроме того, любое приложение, зависящее от платформы, зависит от Microsoft.AspNetCore.All пакета, приводит к публикации приложения, содержащего только приложение и его ресурсы, а не пакеты, перечисленные в метапакете Microsoft.AspNetCore.All . Предполагается, что эти пакеты присутствуют в целевой системе.
Хранилище пакетов среды выполнения устанавливается на узле при установке пакета SDK для .NET. Другие установщики могут предоставлять хранилище пакетов среды выполнения, включая установки zip/tarball SDK для .NET, Red Hat Yum, apt-get, пакет хостинга .NET Core для Windows Server и ручную установку хранилища пакетов среды выполнения.
При развертывании приложения зависящего от платформы развертывания, убедитесь, что в целевой среде установлен SDK для .NET. Если приложение развертывается в среде, которая не содержит ASP.NET Core, вы можете отказаться от неявного хранилища, указав <PublishWithAspNetCoreTargetManifest> в файле проекта значение, false как показано в следующем примере:
<PropertyGroup>
<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>
Замечание
Для автономных приложений развертывания предполагается, что целевая система не обязательно содержит необходимые пакеты манифестов.
<PublishWithAspNetCoreTargetManifest> Поэтому нельзя задать значение true для автономного приложения.