ChatGPT解决这个技术问题 Extra ChatGPT

.Net Core 和 NuGet

installed .net core from this site。使用它会导致一些相关的包管理问题:

dotnet restore 命令继续“安装”.net 核心 NuGet 包。这些软件包“安装”在哪里?未创建新文件夹。 “hello world”最小示例的 dotnet restore 需要大约一百个 NuGet 包,其中 99% 可能与“hello world”应用程序无关。诚然,.net 原生构建将删除所有不需要的东西——但我预计恢复也只会抓取很少的东西(三个或四个包,而不是一百个)。为什么会有这种行为?我创建了第二个“hello world”项目并再次运行 dotnet restore。这次根本没有安装任何软件包。似乎第一次安装的所有软件包都进入了某个全球位置以进行共享。我认为.Net Core 不是这样工作的。我认为 .Net Core 项目将所有依赖项都保存在本地。我针对的唯一框架是 dnxcore50。为什么会有这种行为?我想“卸载”所有这些全局包,然后再试一次(仅用于学习目的)。那怎么可能实现?请记住,如问题 #1 所述,我不知道所有这些文件的安装位置。几乎所有通过 restore 命令安装的软件包都被列为 beta。奇怪的。我认为 .Net Core 处于 RC1 中,而不是 beta 版。对此感到困惑。为什么会有这种行为?

我也很好奇哪些文档可以/会向我解释这一切。我尝试用谷歌搜索这些问题,但一无所获(也许只是可怕的 google-fu?)。

“我认为 .Net Core 项目将所有依赖项都保留在本地。”不包含在任何答案中。简单来说,只有当您使用 dotnet publish 生成部署包时,这些依赖才会成为本地的。自包含部署模式会将所有依赖项抓取到同一个文件夹中,docs.microsoft.com/en-us/dotnet/core/deploying 不幸的是,此线程是在 Microsoft 创建新的 Docs 站点之前发布的,因此任何未来的读者都应该去查看新的 Docs。

V
Vivek N

更新:

nuget 包安装在全局位置。默认情况下,它曾经是 ..\Users\[YourUserFolder]\.dnx\packages 但它似乎已更改为 ..\Users\[YourUserFolder]\.nuget\packages

在 NuGet 3+ 中,您可以使用 NuGet CLI 的以下命令来获取 global-packages 文件夹位置

nuget locals global-packages -list

查看以下链接以获取有关 NuGet 的更多详细信息

http://blog.nuget.org/20151008/NuGet-3-What-and-Why.html

https://docs.nuget.org/ndocs/consume-packages/configuring-nuget-behavior

https://docs.nuget.org/ndocs/tools/nuget.exe-cli-reference#locals

默认的 ASP.Net 模板有很多包。由于您第一次尝试,它尝试获取所有这 100 个包您已经在您的 nuget 全球位置拥有这些包,它跳过了恢复。删除 packages 文件夹下的所有内容(位置在 1 中指示)一些 beta 包在那里。您可以转到 project.json 文件(在 web 根目录下可用)并使用依赖项部分。


dotnet restore 是为“hello world”控制台应用程序执行的,而不是 ASP.Net 应用程序。所以#2肯定有不同的答案。对于#3,是的,我同意他们去了一个全球位置……但这不是 NuGet 的默认行为,也不是 .Net Core 的广告行为。所以#3仍然需要更多的调查。但是,我会将您的回答标记为答案 - 我将再次作为单独的堆栈溢出问题提问。
控制台应用程序有相当多的 Nuget 包,尤其是 Core 框架。所以无论你会注意到很多恢复。你是正确的 Reg #3,我在 github 上看到了这篇非常好的文章。 github.com/aspnet/Home/wiki/Package-Locations
the console app has quite a bit of NuGet packages。是的,这是绝对正确的。但我在问 为什么 它有很多依赖项。问题是为什么?此外,您的 github 文章链接不起作用。
这是因为模板控制台应用程序需要一些额外的 .Net 库,这些库本身不是 .Net Core 的一部分。这些额外的 .Net 库被打包到 Nuget 包中,因此它们显示为依赖项。 github的链接应该可以工作。 github.com/aspnet/Home/wiki/Package-Locations
在 Linux 上,您会在隐藏文件夹 /home/me/.nuget 的主目录中找到下载的 NuGet 包。 NuGet 将在第一次被请求时下载该包并将其存储在此处以供您的所有项目使用 - 这很像 java 世界的 maven。
D
Dibran

我刚刚发现 .NET 核心项目中使用的 NuGet 包还有另一个位置。它位于:

C:\Users\[User]\.nuget\packages

我认为这个位置包含常规的 .NET Framework 包。

更新:感谢 brappleye3,这是有关 dotnet restore 的文档的link


链接到来源?很高兴看到记录在哪里 - 附近可能还有其他智慧。另外,我相信这是所有东西(核心项目除外)的默认 Nuget 位置,不是吗?
我将包添加到 .NET Core 项目中,它们最终位于此位置,而不是接受的答案中的位置。
以防万一有人想知道 osx/linux 的位置在哪里:根据 dotnet-restore 命令文档,“[nuget 包缓存] 位于所有操作系统上用户主目录的 .nuget/packages 目录中(对于例如,Linux 上的 /home/user1 或 Windows 上的 C:\Users\user1)。” docs.microsoft.com/en-us/dotnet/articles/core/tools/…
J
Jester

我正在使用 .Net Core 2.x,我认为是 NuGet 4.x。在这里找到包裹位置:

C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\


您发布的内容与问题无关。接受的答案并不完美,但您不应该尝试以这种方式更新它。
它是相关的:更多当前的库,新的路径。只是一些更近期的信息。无需投票即可添加一些信息。
我投反对票不仅是因为它无关紧要,而且是不正确的。你可以去构建一个只安装了 .NET SDK 的干净机器来看看你自己。您根本看不到您在其上指定的文件夹。如果您的目的是帮助他们,请不要误导读者。
这很有帮助。我在这个目录中有包。谢谢@Jester