nuget中打包项目参考:.net core

Sig*_*die 5 .net c# nuget nuget-package-restore asp.net-core

目前我有一个要求,我们有单独的合同和实施程序集。创建 nuget 包并尝试使用 nuget 包后,它会失败,因为包管理器无法找到依赖(合同)程序集。

这似乎是 .net core 中的一个开放问题。

https://github.com/dotnet/cli/issues/3959

无法理解为什么这么简单的事情在.net core 中不起作用。正在寻找此问题的解决方法。

Maj*_*jor 7

解决起来很简单。您有 2 个选择:

A) 将所有项目打包并发布为 Nuget 包:

您只需将依赖项添加ProjectReference到您的主项目中即可。并使用项目参考继续开发。还必须打包所有依赖项目。当您想使用相同版本发布包时,只需运行:

dotnet pack -p:PackageVersion=2.1.0还可以添加任何其他pack参数

因为期间pack都会ProjectReference转化为Package依赖关系。并且version数字级联到所有包中。

在这种情况下,您的原始主项目及其所有依赖项都将被 Nuget 打包。现在你必须发布全部。当您想要安装 Nuget 包时,它将安装其所有依赖项以及指定的相同版本。

B) 将所有输出 DLL 打包到一个 Nuget 包中:

您可以仅将一个项目发布为 Nuget 包,并将所有其他 DLL 打包到该包中。首先抑制pack将依赖关系从 Project 转换为 Package。找到你的ProjectReference并添加PrivateAssets="All"到其中。应该看起来像这样:

<ProjectReference Include="yourproj.csproj" PrivateAssets="All" />
Run Code Online (Sandbox Code Playgroud)

并将以下部分添加到您的.csproj文件(要打包的项目中)以打包依赖DLL,更改.dll中的DLL名称和Framework版本<PackagePath>

<ItemGroup>
  <_PackageFiles Include="$(OutputPath)\yourproj.dll">
    <BuildAction>None</BuildAction>
    <PackagePath>lib\net5.0</PackagePath>
  </_PackageFiles>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)


Sig*_*die 1

阅读文档后,我了解到 .net core 不鼓励项目引用,而是建议使用包引用。以下文档的描述标题中提到了这一点。

https://github.com/dotnet/docs/blob/master/docs/core/tools/dotnet-pack.md

我将合同程序集发布到 nuget 包,并在实现中将其作为 nuget 包使用。