【问题标题】: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 文件时,我看到了两个奇怪的东西:

  1. 生成的.nuspec文件与我在项目文件夹中添加的不同
  2. cl2 在新生成的.nuspec 文件中被提及为依赖项,但cl2 的DLL 不包含在.nupkglib 文件夹中。所以,每当我在另一个解决方案中使用这个包时,我都会收到错误 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>
    
    1. 生成的 .nuspec 文件与我在项目文件夹中添加的不同

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

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

    依赖项适用于。因此,当 NuGet 还原包时,它会搜索该包所依赖的其他包,此处为 cl2,但没有,因此出现错误。打包项目时,引用的项目包含在包中。那是一个开放的issue,还有workarounds,你可以试试。

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

    • 仅使用单个项目,所有内容都将包含在包中
    • 单独打包每个项目并使用生成的包而不是引用的项目

    【讨论】:

    • 感谢您的回答,让我试试这个解决方法。
    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2020-01-30
    • 2014-12-11
    • 2018-10-03
    • 1970-01-01
    相关资源
    最近更新 更多