目前我有一个要求,我们有合同和实施的单独组件。在创建nuget包并尝试使用nuget包之后,它会失败,因为包管理器无法找到依赖(契约)程序集。
这似乎是.net核心中的一个开放问题。
https://github.com/dotnet/cli/issues/3959
无法理解为什么这样简单的东西在.net核心中不起作用。寻找此问题的解决方法。
答案 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包使用。