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

时间:2019-03-19 00:37:24

标签: c# .net nuget nuget-package

我正在编写一个带有一些程序集的API,我希望这些程序集以nuget程序包的形式发布(实际上已完成)。

它被分割成:

  • ChickenAPI.Core(与应用程序,记录器,IoC容器,一些数学实用程序,抽象的事件管道有关的“核心”内容……)
  • ChickenAPI.Data(所有数据访问层,DTO和抽象的“存储库”)
  • ChickenAPI.Enums(所有游戏枚举)
  • ChickenAPI.Game(所有与游戏相关的事物,游戏实体,组件,事件...)
  • ChickenAPI.Packets(游戏使用的所有数据包结构)

我想在nuget上释放其中的每一个,但是有些依赖于其他(例如Game依赖于Core,Data,Enums和Packets,Data依赖于Enums ...)

我应该将它们与本地参考链接起来,还是应该将它们的每个链接链接到各自的“远程软件包”? 这是相关API的链接:https://github.com/BlowaXD/ChickenAPI/

2 个答案:

答案 0 :(得分:2)

您无需使用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。

答案 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=.

感谢其他declaring nuget packages that depend on each other in one solution个问题。

此拉取请求将显示我如何解决此问题(包含每个详细信息): https://github.com/BlowaXD/ChickenAPI/pull/96