Nuget包没有为.NETCoreApp安装依赖项

时间:2017-04-20 14:04:30

标签: .net nuget .net-core

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

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

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

这是我的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上提出问题。

3 个答案:

答案 0 :(得分:1)

在使用包引用来管理nuget依赖项的项目中,您没有project.json。相反,您的所有引用都可以在一个地方(即项目文件)中使用。 在dotnet核心或使用PackageReference的项目中,仅列出了对immidiate依赖项的引用。因此,如果添加对包A的引用,而包A又依赖于包B,则B将不会显示在项目文件中。这是PackageRef的最大优势之一,我们不会混淆项目文件与消费者可能不关心的大量依赖关系。 将nuget包安装到项目中,导航到project_root / obj / project.assets.json并打开此json,您将看到列出的包及其依赖项。如果您在此处看到了预期的依赖关系,则会验证该包是否正确创作。

答案 1 :(得分:1)

可能是由缓存引起的吗?尝试:

清除VS2017 > Tools > Options > NuGet Package Manager > General > Clear All NuGet Cache(s)处的缓存(实际上位于%USERPROFILE%\。nuget中)

对我有用。

答案 2 :(得分:0)

就我而言,我缺少 nuget.org 软件包源。

Tools > Options > Nuget Package Manager > Package Sources

enter image description here