磁盘上存储的 nuget 引用中的库在哪里?
Where are the libraries from the nuget reference stored on the disk?
我正在开发通用 windows 应用程序。我在参考部分看到 Microsoft.NETCore.UniversalWindowsPlatform 带有蓝色 NuGet 图标。当我双击它时,对象资源管理器不会像在普通库引用中那样出现。
当我阅读文档时,我了解到 NuGet 确实下载了库的副本,但是我无法在任何地方找到 DLL,我查看了所有文件夹。
我在哪里可以找到 NuGet 参考的 DLL?这个新实现有什么优势?因为我看不到任何收益,尤其是当您处于离线状态并且无法查看使用对象资源管理器时。
它不是动态链接库。文档很难获得,而且可能会迅速改变。但是您可以通过使用文本编辑器查看 C:\Users\yourname\ .nuget\packages\Microsoft.NETCore.UniversalWindowsPlatform.0.0[=14= 中的 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 包。请注意,每个可能的目标都有条目,当您深入了解细节时,它并不是很 "universal"。
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 年后工作。
更新:但它并没有,自从我第一次写这个 post 以来发生了很多变化。 .NETCore 版本 5 重新编号为版本 1.0 版本 2.0 刚刚发布。该团队承认拥有这么多组件只是一种临时解决方案,可以更轻松地进行更改。我怀疑这只是在众所周知的版本 3 才真正开始稳定。
我正在开发通用 windows 应用程序。我在参考部分看到 Microsoft.NETCore.UniversalWindowsPlatform 带有蓝色 NuGet 图标。当我双击它时,对象资源管理器不会像在普通库引用中那样出现。
当我阅读文档时,我了解到 NuGet 确实下载了库的副本,但是我无法在任何地方找到 DLL,我查看了所有文件夹。
我在哪里可以找到 NuGet 参考的 DLL?这个新实现有什么优势?因为我看不到任何收益,尤其是当您处于离线状态并且无法查看使用对象资源管理器时。
它不是动态链接库。文档很难获得,而且可能会迅速改变。但是您可以通过使用文本编辑器查看 C:\Users\yourname\ .nuget\packages\Microsoft.NETCore.UniversalWindowsPlatform.0.0[=14= 中的 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 包。请注意,每个可能的目标都有条目,当您深入了解细节时,它并不是很 "universal"。
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 年后工作。
更新:但它并没有,自从我第一次写这个 post 以来发生了很多变化。 .NETCore 版本 5 重新编号为版本 1.0 版本 2.0 刚刚发布。该团队承认拥有这么多组件只是一种临时解决方案,可以更轻松地进行更改。我怀疑这只是在众所周知的版本 3 才真正开始稳定。