【问题标题】:Nuget package not installing dependencies for .NETCoreAppNuget 包未安装 .NETCoreApp 的依赖项
【发布时间】:2017-04-20 14:04:30
【问题描述】:

我创建了一个包含 2 个程序集的 nuget 包。一个面向 .Net Framework 4.0,另一个面向 .Net Standard 1.6。

这似乎没有任何问题。但是,针对 .NET Standard 的版本需要一些额外的依赖项才能运行,因此我将这些作为依赖项添加到 nuspec 文件中并重新构建。

依赖项在 NuGet 包管理器中按预期显示,但是当我从 .Net Core 或 .Net 标准应用程序引用包时,它不会添加对依赖项的引用。 该软件包似乎安装良好,日志中没有错误。

这是我的 nuspec 文件的相关部分:

<dependencies>
    <group targetFramework="netstandard1.3">
        <dependency id="System.Collections.Specialized" version="4.0.1.0" />
        <dependency id="System.Threading.Tasks.Parallel" version="4.3.0.0" />
    </group>
    <group targetFramework="netcoreapp1.0">
        <dependency id="System.Collections.Specialized" version="4.0.1.0" />
        <dependency id="System.Threading.Tasks.Parallel" version="4.3.0.0" />
    </group>
</dependencies> 

我在这里错过了什么?

编辑:

更多信息:

我尝试从上面的配置中删除分组,只是列出了没有分组的依赖项,然后我尝试在常规 ASP.NET 项目上安装包。

当您通过包管理器安装包时,会弹出一个窗口列出正在安装的包,在这种情况下,它会列出我的包和依赖项。都很好。

但是,当我在 .NETCoreApp 或 .NETStandard 项目上安装相同的包时,列表中只有我的包。

编辑 2:

我一直在与 NuGet 支持的非常有帮助的人讨论这个问题,发现如果我们使用相同的包,添加到 Visual Studio 2017 中的 .NET Core 应用程序中,那么它可以正常工作,只有在 VS 2015 中出现问题。

他们要求我在 github 上提出问题。

【问题讨论】:

  • 依赖项应该在恢复时传递添加,它们是否显示在使用应用程序的 obj/project.assets.json 文件中? “未添加”到底是什么意思?
  • 当我说未添加时,我的意思是 nuget 包本身显示为解决方案资源管理器中“参考”下的参考。我希望依赖项也会出现在那里,但它们没有。另外,不,它们不会出现在任何 json 文件中。
  • 所以答案是,问题只存在于 VS 2015 中。VS 2017 工作正常。

标签: .net nuget .net-core


【解决方案1】:

在使用包引用来管理 nuget 依赖项的项目中,您没有 project.json。相反,您的所有参考资料都在一个地方可用,即项目文件。 在 dotnet core 或使用 PackageReference 的项目中,仅列出了对直接依赖项的引用。因此,如果您添加对包 A 的引用,而后者又依赖于包 B,则 B 不会出现在您的项目文件中。这是 PackageRef 的最大优势之一,我们不会将项目文件与消费者可能不关心的大量依赖项混在一起。 将你的 nuget 包安装到项目中,导航到 project_root/obj/project.assets.json 并打开这个 json,你会看到你的包和它的依赖项一起列出。如果您在此处看到预期的依赖项,则表明该包已正确编写。

【讨论】:

  • 恐怕没那么简单。当我尝试使用包中的程序集的功能时,它会给我一个“类型'x'是在未引用的程序集中定义的”错误,即使该程序集在 NuGet 包中列为依赖项.所以肯定有参考缺失。
  • 我真的很想看一个复制品....你能在这里分享或给我发电子邮件到 karann[at]microsoft[dot]com
  • 当然,github上的问题(github.com/NuGet/Home/issues/5130)是底部嵌入了NuGet包的问题。
  • 在 vs2015 中,.NET Core 处于预览阶段。正如您所发现的,这适用于 VS2017。我建议使用 minClientVersion 属性来确保仅在 2017 年使用该包,因为我预计不会很快在 2015 年修复。
  • 你可能是对的。感谢您提供有关 minClientVersion 的提示。
【解决方案2】:

也许是缓存造成的?试试:

清理VS2017 &gt; Tools &gt; Options &gt; NuGet Package Manager &gt; General &gt; Clear All NuGet Cache(s) 处的缓存(实际上在 %USERPROFILE%\.nuget 中)

这对我有用。

【讨论】:

    【解决方案3】:

    在我的情况下,我缺少 nuget.org 包源。

    Tools > Options > Nuget Package Manager > Package Sources
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      相关资源
      最近更新 更多