Я пишу API, с некоторыми сборками, я бы хотел, чтобы эти сборки были опубликованы в виде пакетов nuget (это на самом деле сделано).
Это разделено на:
Я хотел бы выпустить каждый из них на nuget, но некоторые зависят от некоторых других (например, Game зависит от Core, Data, Enums и Packets, Data зависит от Enums...)
Должен ли я связать их с локальной ссылкой или я должен связать каждую из их ссылок с соответствующими "удаленными пакетами"? Вот ссылка на соответствующий API: https://github.com/BlowaXD/ChickenAPI/
Для этого вам не нужно использовать файл nuspec - обычные файлы проекта .NET Core SDK работают нормально.
Используйте <ProjectReference>
для ссылки на один проект из другого, и это будет частью зависимостей в пакете NuGet.
Например:
ChickenApi.Core.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- TODO: Extra NuGet properties, e.g. Description, Authors -->
<Version>1.0</Version>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>
ChickenApi.Game.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- TODO: Extra NuGet properties, e.g. Description, Authors -->
<Version>1.0</Version>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\ChickenApi.Core\ChickenApi.Core.csproj" />
</ItemGroup>
</Project>
Если вы запустите dotnet pack -c Release
для решения, это создаст два файла nupkg
, по одному для каждого проекта. Просто опубликуйте оба пакета, и все будет хорошо.
Однако следует помнить одну вещь: если вы измените ChickenApi.Core
и затем ChickenApi.Core
от этих изменений в ChickenApi.Game
, вы должны опубликовать оба пакета (с обновленными номерами версий). Легко забыть изменить версию ChickenApi.Core
и опубликовать новую версию ChickenApi.Game
которая утверждает, что она все еще ссылается на 1.0, но зависит от изменений, которых нет в опубликованной версии 1.0.
Мне удалось сделать это с помощью файлов Nuget.nuspec.
Вот XML, который я использую, чтобы построить его
<?xml version="1.0" encoding="utf-16"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>ChickenAPI.Game.Extensions</id>
<version>$(VERSION_OF_CHICKEN_API)</version>
<authors>BlowaXD</authors>
<projectUrl>http://github.com/BlowaXD/ChickenAPI</projectUrl>
<iconUrl>https://raw.githubusercontent.com/BlowaXD/ChickenAPI/develop/docs/_media/logo_256.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>ChickenAPI.Game.Extensions is an collection of useful methods to manage game objects</description>
<summary>ChickenAPI is an API for Nostale Private Servers</summary>
<copyright>Copyright BlowaXD 2019</copyright>
<language>en-US</language>
<dependencies>
<dependency id="ChickenAPI.Game" version="$(VERSION_OF_CHICKEN_API)" />
</dependencies>
</metadata>
</package>
и вот командная строка, которую я использую для сборки пакета:
dotnet pack -c Release src/ChickenAPI.Core --output nupkgs /p:NuspecFile=chickenapi.core.nuspec /p:NuspecBasePath=.
Благодаря этому объявляются пакеты nuget, которые зависят друг от друга в одном решении другого вопроса.
Этот запрос на извлечение покажет, как я решил проблему (с каждой деталью): https://github.com/BlowaXD/ChickenAPI/pull/96