释放引用其他程序集的 nuget 包
Release nuget packages that have reference to other assemblies
我正在编写 API,其中包含一些程序集,我希望将这些程序集发布为 nuget 包(实际上已经完成)。
它分裂了:
- ChickenAPI.Core("core" 与应用、记录器、IoC 容器、一些数学实用程序、抽象事件管道等相关的东西...)
- ChickenAPI.Data(所有数据访问层、DTO 和抽象"repository")
- ChickenAPI.Enums(所有游戏枚举)
- ChickenAPI.Game(所有与游戏相关的东西,游戏实体,组件,事件...)
- ChickenAPI.Packets(游戏使用的所有数据包结构)
我想在 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.
我正在编写 API,其中包含一些程序集,我希望将这些程序集发布为 nuget 包(实际上已经完成)。
它分裂了:
- ChickenAPI.Core("core" 与应用、记录器、IoC 容器、一些数学实用程序、抽象事件管道等相关的东西...)
- ChickenAPI.Data(所有数据访问层、DTO 和抽象"repository")
- ChickenAPI.Enums(所有游戏枚举)
- ChickenAPI.Game(所有与游戏相关的东西,游戏实体,组件,事件...)
- ChickenAPI.Packets(游戏使用的所有数据包结构)
我想在 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.