在nuget:.net核心中打包项目参考

时间:2017-12-07 16:49:01

标签: c# .net asp.net-core nuget nuget-package-restore

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

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

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

无法理解为什么这样简单的东西在.net核心中不起作用。寻找此问题的解决方法。

2 个答案:

答案 0 :(得分:2)

解决起来很简单。您有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" />

然后将以下部分添加到.csproj文件中(应包装的项目中)以打包依赖项DLL,更改DLL名称和<PackagePath>中的Framework version < / strong>。

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

答案 1 :(得分:1)

阅读文档后,我明白.net核心不鼓励项目参考,而是建议使用包参考。这在以下文档的描述标题中提到。

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

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