自定义Nuget软件包显示缺少依赖项错误

时间:2020-07-24 10:44:19

标签: c# .net-core dependencies nuget

在一个解决方案(.NET Core)中有两个类库。其中一个( const entity = {/* Put your entity definition here */}; agent.client.addJson_({sessionEntityTypes: [entity]}); )是一个主库,它依赖于另一个库(windowSoftInputMode = "stateHidden | adjustResize" )。我在项目文件夹(cl1文件的相同位置)中为cl2项目添加了一个仅包含所需元数据(没有依赖项,没有文件)的.nuspec文件,并且我将{ {1}}是cl1的财产。 每当我构建类库(.csproj)时,GeneratePackageOnBuild都会自动在debug / release文件夹中创建。

当我检查生成的true文件时,我看到两个奇怪的事情:

  1. 生成的cl1文件与我在项目文件夹中添加的文件不同
  2. 在新生成的.nupkg文件中提到了
  3. .nupkg作为依赖项,但{{1}的.nuspec文件夹中没有包含cl2的DLL。 }。因此,每当我在另一种解决方案中使用此软件包时,都会收到.nuspec的错误cl2

我已经在互联网上冲浪,但无法找到解决上述错误的合适方法。

1 个答案:

答案 0 :(得分:0)

我已经在项目文件夹(.csproj文件的相同位置)中添加了一个.nuspec文件[...]

您必须使用.csproj标签在NuspecFile中指定您自己的NuSpec文件的路径,否则它将被忽略,并且将使用来自{{1} }文件,请参见reference。您需要使用文件的相对路径或绝对路径,例如:

.csproj
  1. 生成的.nuspec文件与我在项目文件夹中添加的文件不同

如上所述,您的NuSpec文件可能不包括在内。但是,即使存在,也会存在差异,因为一些信息,例如源文件位置不是必需的,目标位置在大多数情况下是由内部软件包文件结构本身指定的,因此它不存在,因为它是多余的。

    在新生成的.nuspec文件中提到了
  1. cl2作为依赖项,但是.nupkg的lib文件夹中没有包含cl2的dll。因此,每当在其他解决方案中使用此nupkg时,cl2都会出现错误“源中不存在具有此ID的软件包”。

依赖项用于软件包。因此,当NuGet还原软件包时,它将搜索此软件包所依赖的其他软件包,这里<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <NuspecFile>cl1.nuspec</NuspecFile> </PropertyGroup> </Project> ,但是没有,因此会出现错误。打包项目时,包装中包含引用的项目。这是一个开放的issue,您可以尝试使用workarounds

最可靠但最不方便的解决方案是完全避免此问题。

  • 仅使用一个项目,所有内容都将包含在软件包中
  • 打包每个项目并使用生成的包代替引用的项目