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

分成两部分:


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


我想在nuget上释放其中的每一个,但其中一些依赖于其他(例如,游戏依赖于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.Game中的那些更改,则必须发布两个软件包(具有更新的版本号)。忘记更改ChickenApi.Core的版本并发布ChickenApi.Game的新版本很容易,该版本声称它仍指的是1.0,但取决于未发布的1.0中的更改。

10-06 11:41