2016-09-15 74 views
3

安装VS 2015更新3(和nuget 3.4.4)后,我注意到更多依赖项被安装到我的4.6.1项目中时我导入了一些依赖于.NETStandard 1.4的东西。Nuget 3.4.4下载用于项目定位的.NET标准1.4库.NET Framework 4.6.1

由于.NET Framework 4.6.1实现.NET Standard 1.4,为什么nuget引入每个System.X程序集?它不应该知道目标框架已经有了它所需要的吗?

步骤来重现我看到什么(困惑):

  1. VS 2015更新3,升级到的NuGet 3.5 RC1(但你没有)。
  2. 新控制台应用程序针对.NET框架4.6.1
  3. 安装,包装Microsoft.IdentityModel.Clients.ActiveDirectory
  4. 注意到它在.NET 1.4标准(其中我的目标框架实现)
  5. 通知的System.XSystem.IOSystem.Collections依赖,System.Linq等)。这似乎没有必要,我没有更新nuget之前发生。
+0

这些额外的依赖关系是什么?请告诉我们有这个问题的具体软件包,这可以让我们在我们这边确认这个问题。另外,VS2015 Update 3中的最新版本NuGet是3.5版本。请升级到3.5版以检查此问题是否仍然存在。 –

+2

VS 2015 Update 3安装了Nuget 3.4.4,而不是3.5。 Nuget 3.5仍在RC中,上面仍然存在这个问题。在安装VS Update 3之前,在添加Microsoft.IdentityModel.Clients.ActiveDirectory nuget包时,依赖链中不包含额外的Core库。安装Update 3后,Core库开始添加到依赖关系链中。我安装了Nuget 3.5 RC并且有同样的问题。为什么在添加.Net Standard 1.4库以.Net 4.6.1为目标时,将Core库作为依赖包含在内? –

+0

如果没有人能解释它,这听起来应该将它作为一个问题提交给nuget。我会再给它几天;也许我错过了一些东西。 – Kevin

回答

0

在我的Visual Studio 2015更新3中将我的NuGet包管理器降级到版本3.3后,我发现在我的项目中安装Microsoft.IdentityModel.Clients.ActiveDirectory包时,没有将依赖关系添加到我的项目。所以这个问题是由NuGet版本引起的。

根据release note for NuGet 3.4,它开始为“支持netstandard和netstandardapp框架标记”。这意味着NuGet 3.4开始支持.NET标准和.NET标准框架相关的应用程序。

请将NuGet 3.3和NuGet 3.4或更高版本中的Dependencies部分与同一个软件包进行比较。在版本3.4之前,它显示“不支持”,但从3.4版开始,它显示“.NET标准,版本1.4”。这就是为什么当你安装NuGet 3.4.4时,所有依赖项都会被添加到你的项目中。 enter image description here

+0

这仍然不能回答为什么Core依赖包含在以.NET 4.6.1为目标的项目中的问题。如果我的项目是针对整个框架的,那么为什么我需要包含像System.Collections和System.IO等核心库? –

+1

依赖性意味着当前包需要在您的项目中使用这些版本的依赖关系。即使它们在包依赖项列表中列出,它们也不会将它们全部安装到项目引用中。因为你的.NET 4.6.1项目已经实现了.NET标准1.4。安装完成后,请检查项目中的引用,没有添加System.Collections和System.IO。你会发现那里只有你的项目中不包含的dll添加到参考中。 –

+0

好吧,这很有趣(并且令人困惑,因为这不是Nuget过去的表现)。 System。*依赖项位于我的项目的Nuget Package Manager中,但正如您所述,它们不在我的项目引用或我的bin文件夹中。 –

相关问题