【问题标题】:Custom Nuget package shows missing dependency error自定义 Nuget 包显示缺少依赖项错误
【发布时间】:2020-07-24 10:44:19
【问题描述】:
我在一个解决方案 (.NET Core) 中有两个类库。其中一个(cl1)是一个主库,它依赖于另一个库(cl2)。我已经为项目文件夹中的cl1 项目(.csproj 文件的相同位置)添加了一个仅包含所需元数据的.nuspec 文件(无依赖项,无文件),并且我已将GeneratePackageOnBuild 属性设置为@987654327 @。
每当我构建类库 (cl1) 时,.nupkg 会在调试/发布文件夹中自动创建。
当我检查生成的.nupkg 文件时,我看到了两个奇怪的东西:
- 生成的
.nuspec文件与我在项目文件夹中添加的不同
-
cl2 在新生成的.nuspec 文件中被提及为依赖项,但cl2 的DLL 不包含在.nupkg 的lib 文件夹中。所以,每当我在另一个解决方案中使用这个包时,我都会收到错误 No packages exist with this id in source(s) 的 cl2。
我已经上网,但无法找到解决上述错误的正确方法。
【问题讨论】:
标签:
c#
.net-core
dependencies
nuget
【解决方案1】:
我在项目文件夹中添加了一个 .nuspec 文件 [...](与 .csproj 文件的位置相同)
您必须在.csproj 中使用NuspecFile 标记指定您自己的NuSpec 文件的路径,否则它将被忽略,并且将使用.csproj 文件中的元数据创建包,请参阅@ 987654321@。您需要使用文件的相对路径或绝对路径,例如:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<NuspecFile>cl1.nuspec</NuspecFile>
</PropertyGroup>
</Project>
- 生成的 .nuspec 文件与我在项目文件夹中添加的不同
如前所述,您的 NuSpec 文件可能不包括在内。但是,即使是,也可能存在差异,因为 一些信息,例如源文件位置是不必要的,目标位置在大多数情况下由内部包文件结构本身给出,因此它不存在,因为它是多余的。
- cl2 在新生成的 .nuspec 文件中被提及为依赖项,但 .nupkg 的 lib 文件夹中不包含 cl2 的 dll。因此,每当我在其他解决方案中使用此 nupkg 时,我都会收到错误消息“源中不存在具有此 ID 的软件包”。
依赖项适用于包。因此,当 NuGet 还原包时,它会搜索该包所依赖的其他包,此处为 cl2,但没有,因此出现错误。打包项目时,引用的项目不包含在包中。那是一个开放的issue,还有workarounds,你可以试试。
最可靠但不方便的解决方案是完全避免该问题。
- 仅使用单个项目,所有内容都将包含在包中
- 单独打包每个项目并使用生成的包而不是引用的项目