【问题标题】:Where are the libraries from the nuget reference stored on the disk?nuget 引用中的库存储在磁盘上的什么位置?
【发布时间】:2016-02-23 07:40:33
【问题描述】:

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

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

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

【问题讨论】:

  • documentation 在这个问题上非常清楚。我不确定这是一个诚实的问题还是只是伪装的咆哮。
  • 这是一个问题,文档没有为 dll 本身指定任何路径,请停止智能谈话,如果你能解释一下,请这样做。
  • 这是来自文档的直接引用:“包文件夹包含每个已安装包的子文件夹。此子文件夹包含包安装的文件。它还包含包文件本身(.nupkg文件,这是一个 .zip 文件,其中包含包中包含的所有文件)。”更不用说,如果您确实“查看了所有文件夹”,那么很难完全错过 packages 文件夹。
  • 根据包资源管理器,您试图在此处显示的特定包不包含任何 dll,它只有 有一个 runtime.json。 npe.codeplex.com/releases/clickonce/…
  • 这个包的唯一工作似乎是确保安装其他特定库的最低版本。

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


【解决方案1】:

它不是 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

注意“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 是编译器使用 /reference 选项实际看到的 Nuget 包。它的 ref\dotnet 子目录有引用程序集,它的 lib\netcore50 子目录有运行时程序集。

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

非常复杂,必须有一台机器知道如何将所有这些球保持在空中。也很可怕,你不得不怀疑这个装置在 10 年后是否还能工作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 2012-11-02
    • 2012-05-13
    相关资源
    最近更新 更多