首页 文章

.Net核心意外的NuGet行为

提问于
浏览
0

installed .net core from this site并按照测试"hello world"控制台应用程序的三步说明操作:

dotnet new
dotnet restore
dotnet run

一切正常,控制台应用程序成功运行 .

然而, restore 步骤做了两件意想不到的事情 . 首先,它将包恢复到NuGet的全局包文件夹( %userprofile%\.nuget\packages ) . 这种 global install 以前从未成为NuGet的默认行为 . 当然,如果 dotnet restore 在内部使用nuget.exe ...这种行为可能是由于缺少Visual Studio解决方案文件 .

但是,这只是强调了第二个意外行为 . restore 操作将85个软件包安装到全局NuGet软件包文件夹中 . 实际上,示例控制台应用程序不需要所有这些包 .

看起来,这与.Net Core所声称的完全矛盾 .

例如,对于这个简单的“hello world”控制台应用程序,以下是一些已安装的软件包:

  • runtime.win7.System.Net.Sockets

  • System.Globalization.Calendars

  • System.Linq

因此,简单的'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的主张不矛盾?

2 回答

  • 1

    我没有在这台机器上安装dotnet但是,如果我没记错的话, dotnet new 创建的应用程序引用 NETStandard.Library 这是一个有很多依赖关系的"umbrella"包 . 您可以将其替换为您的应用程序所需的 System.* 依赖项,并且您将在还原时获得更少的程序包 .

    如果你的应用程序依赖于X包,那么它可能会恢复超过X,因为它还需要带来这些包的所有依赖关系 . 这就是为什么你看到很多软件包恢复的原因 .

    如果要在本地安装软件包,可以在运行 dotnet restore 时指定packages文件夹,然后为运行时设置 NUGET_PACKAGES 环境变量 .

  • 0

    软件包安装到 %userprofile%\.nuget\packages 用于缓存目的 . 随着微软逐渐将所有东西都变成一个包(系统 . *等),每次创建一个新项目时都不下载包是有意义的 .

    如果查看NuGet上的runtime.win7.System.Net.Sockets包,您将看到对System.Private.Networking的依赖 . 反过来,在很多包装上都有dependency .

    enter image description here

    安装的软件包可能与这些软件包匹配 .

相关问题