释放引用其他程序集的 nuget 包

Release nuget packages that have reference to other assemblies

我正在编写 API,其中包含一些程序集,我希望将这些程序集发布为 nuget 包(实际上已经完成)。

它分裂了:

我想在 nuget 上发布每一个,但有些依赖于其他一些(例如游戏依赖于核心、数据、枚举和数据包,数据依赖于枚举...)

我应该 link 他们与本地参考还是我应该 link 他们的每个 link 到各自的 "remote packages" ? 这是相关 API 的 link :https://github.com/BlowaXD/ChickenAPI/

我已经通过 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=.

感谢 另一个问题。

这个拉取请求将展示我是如何解决这个问题的(包括每一个细节): https://github.com/BlowaXD/ChickenAPI/pull/96

您不需要使用 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.Game 中的那些更改,您 必须 发布这两个包(具有更新的版本号)。很容易忘记更改 ChickenApi.Core 的版本并发布 ChickenApi.Game 的新版本, 声称 它仍然指的是 1.0,但取决于更改已发布 1.0.