我installed .net core from this site并按照测试“hello world”控制台应用程序的三步说明进行操作:
dotnet new
dotnet restore
dotnet run
一切正常,控制台应用程序成功运行。
然而,restore
步骤做了两件意想不到的事情。首先,它将包恢复到NuGet的全局包文件夹(%userprofile%\.nuget\packages
)。这种全局安装以前从未成为NuGet的默认行为。当然,如果dotnet restore
在内部使用nuget.exe ......这种行为可能是由于缺少Visual Studio解决方案文件。
但是,这只是强调了第二个意外行为。 restore
操作将85个软件包安装到全局NuGet软件包文件夹中。实际上,示例控制台应用程序不需要所有这些包。
看起来,这与.Net Core所声称的完全矛盾。
例如,对于这个简单的“hello world”控制台应用程序,以下是一些已安装的软件包:
因此,毫无疑问简单的'hello world'控制台应用程序的含义,这是整个程序:
using System;
namespace ConsoleApplication
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
我的预期是示例控制台应用程序所需的软件包数量介于0和3-ish之间。再次,根据.Net Core的说法,我预计NuGet软件包将在本地安装 - 与示例控制台应用程序本身位于同一文件夹中。
有人可以澄清一下为什么或如何这种行为与.Net Core的主张不矛盾?
答案 0 :(得分:1)
我没有在此计算机上安装dotnet,但是,如果我没记错的话,dotnet new
创建的应用引用了NETStandard.Library
这是一个"保护"包含很多依赖项的包。您可以将其替换为您的应用所需的System.*
依赖项,并在恢复时获得更少的包。
如果您的应用程序依赖于X包,那么它可能会恢复超过X,因为它还需要带来这些包的所有依赖关系。这就是为什么你看到很多包被恢复的原因。
如果要在本地安装软件包,可以在运行dotnet restore
时指定packages文件夹,然后为运行时设置NUGET_PACKAGES
环境变量。
答案 1 :(得分:0)
将软件包安装到%userprofile%\.nuget\packages
以进行缓存。随着微软逐渐将所有东西都变成一个软件包(System。*等),每次创建一个新项目时都不会下载软件包。
如果查看NuGet上的runtime.win7.System.Net.Sockets包,您将看到对System.Private.Networking的依赖。反过来,在很多包装上都有dependency。
安装的软件包可能与这些软件包匹配。