来自nuget引用的库存储在磁盘上的哪个位置?

时间:2015-11-20 17:56:12

标签: c# .net nuget win-universal-app uwp

我正在开发一个通用的Windows应用程序。我看到在参考部分我有带有蓝色NuGet图标的Microsoft.NETCore.UniversalWindowsPlatform。当我双击它时,对象资源管理器不会出现在正常的库引用中。

当我阅读文档时,我知道NuGet确实下载了该库的副本,但是我无法在任何地方找到DLL,我查看了所有文件夹。

我在哪里可以找到NuGet Reference的DLL,这个新实现带来了什么优势?因为我无法获得任何收益,特别是如果您处于离线状态并且无法使用对象资源管理器。

enter image description here

1 个答案:

答案 0 :(得分:4)

它不是DLL。文档很难得到,而且很可能会迅速改变。但是你可以通过使用文本编辑器来查看C:\ Users \ yourname \ .nuget \ packages \ Microsoft.NETCore.UniversalWindowsPlatform \ 5.0.0

中的Microsoft.NETCore.UniversalWindowsPlatform.nuspec文件。

您会发现它实际上是一个包含清单的XML文件:

<dependencies>
  <dependency id="Microsoft.NETCore.Runtime" version="1.0.0" />
  <dependency id="Microsoft.NETCore" version="5.0.0" />
  ... etc

反过来,这些是构建项目所需的Nuget包。列表中的第一个是located here

首次构建项目时会检索这些包。它们也存储在C:\ Users \ yourname \ .nuget \ packages中。列表中的第一个,Microsoft.NETCore.Runtime在其runtime.json文件中有另一个重定向:

  "runtimes": {
    "win7-x86": {
      "Microsoft.NETCore.Runtime": {
        "Microsoft.NETCore.Runtime.CoreCLR-x86": "1.0.0",
        "Microsoft.NETCore.Windows.ApiSets-x86": "1.0.0"
      }
    },
    ...etc

注意&#34; win7&#34;绰号,那里应该有一个故事:) Microsoft.NETCore.Runtime.CoreCLR-x86和Microsoft.NETCore.Windows.ApiSets-x86是更多的nuget包。请注意,每个可能的目标都有条目,它不是非常普遍的&#34;当你了解细节时。

Microsoft.NETCore.Runtime.CoreCLR-x86.nuspec包含另一个清单:

<dependencies>
  <dependency id="System.Collections" version="[4.0.10]" />
  <dependency id="System.Diagnostics.Debug" version="[4.0.10]" />
  ...etc

我们终于找到了真正的DLL。 System.Collections是编译器实际使用/ reference选项看到的Nuget包。它的ref \ dotnet子目录有引用程序集,它的lib \ netcore50子目录有运行时程序集。

请注意,如何使用 very 大量的DLL。旧的.NET Framework被拆分为许多子程序集。 .NET Native对于防止冷启动时间非常重要。它仅使用您实际使用的方法编译所有这些程序集,并将它们合并回blob。

非常复杂,必须有一台知道如何将所有这些球保持在空中的机器。相当可怕的是,你不得不怀疑这个装置从现在起10年后是否仍会有效。

更新:自从我第一次写这篇文章以来,它没有发生很多变化。 .NETCore版本5重新编号为刚刚发布的1.0版2.0。该团队承认,拥有如此多的组件只是一种临时解决方案,可以更容易地进行更改。我怀疑这只是真正开始稳定在众所周知的版本3。