NuGet引用的库在磁盘上存储在哪里?

3
我正在开发一款通用的Windows应用程序。我看到在参考资料部分中有一个带有蓝色NuGet图标的Microsoft.NETCore.UniversalWindowsPlatform。当我双击它时,对象资源管理器不会像普通库引用那样出现。
阅读文档后,我了解到NuGet确实会下载库的副本,但我无法在任何文件夹中找到DLL文件。
我在哪里可以找到NuGet引用的DLL文件,这种新实现带来了什么优势?因为我看不到任何收益,特别是如果你离线并且无法使用对象资源管理器进行查看。

enter image description here


1
这是一个问题,文档本身没有指定任何dll的路径,请不要说些聪明话,如果您能解释一下,请这样做。 - Freeman
对于我安装过的每个软件包,都有一个lib文件夹,里面肯定有一些.dll文件,针对该软件包可用的每个.NET版本都有相应的文件。 - Claies
那就是压缩文件,对吧?packages文件夹里的内容在哪里?你有构建这个项目吗? - Claies
1
看起来这个包的唯一工作就是确保安装了其他特定库的最低版本。 - Claies
显示剩余8条评论
1个回答

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软件包。列表中的第一个软件包可以在这里找到。
当您首次构建项目时,将获取这些软件包。它们也会被存储在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

请注意“win7”这个名称,里面应该有一个故事:)Microsoft.NETCore.Runtime.CoreCLR-x86和Microsoft.NETCore.Windows.ApiSets-x86是更多的NuGet包。请注意,对于每个可能的目标都有条目,当你深入细节时它并不是非常“通用”。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是一个Nuget包,编译器实际上可以通过/reference选项看到它。它的ref\dotnet子目录有引用程序集,其lib\netcore50子目录有运行时程序集。
请注意,涉及到非常多的DLL。旧的.NET Framework被拆分成许多子程序集。.NET Native非常重要,以防止这种情况导致冷启动时间过长。它会编译所有这些程序集,仅使用您实际使用的方法,并将它们合并回一个blob中。
非常复杂,必须有一台机器知道如何使所有这些球在空中保持平衡。相当可怕,您必须想知道这个装置是否仍然能在10年后工作。
更新:事实证明没有,自我写这篇文章以来发生了很多变化。 .NET Core 5版本已重新编号为版本1.0。版本2.0刚刚推出。团队承认,拥有如此多的程序集只是为了更容易进行更改而采取的临时解决方案。我猜这只有在谚语般的第3个版本开始真正稳定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接