.Net Core和NuGet

67

我从这个网站安装了 .net core。在使用它时,出现了一些相关的包管理问题:

  1. dotnet restore 命令会“安装” .net core NuGet 包。这些包“安装”在哪里?没有创建新的文件夹。
  2. 针对 “hello world” 最简示例的 dotnet restore 需要约 100 个 NuGet 包,其中 99% 可能与“hello world”应用程序无关。当然,.net 原生构建将删除所有不需要的东西 - 但我预期 restore 也只会抓取很少量(三四个)的包,而不是一百个。为什么会这样?
  3. 我创建了第二个“hello world”项目,再次运行了 dotnet restore。这一次根本没有安装任何包。看来第一次安装的所有包都进入了某个全局位置以供共享。我认为 .Net Core 不是这样工作的。我认为 .Net Core 项目会将所有依赖项保存在本地。我所定位的唯一框架是 dnxcore50。为什么会这样?
  4. 我想“卸载”所有这些全局包,并尝试一次(仅供学习目的)。该如何实现?请记住,如问题#1所述,我不知道所有这些文件被安装在哪里。
  5. 几乎所有通过 restore 命令安装的包都标为 beta。奇怪。我想 .Net Core 是 RC1 而不是 beta。对此感到困惑。为什么会这样?

我也很好奇有哪些文档可以/应该向我解释所有这些问题。我尝试通过 Google 搜索每个问题,但没有找到任何东西(可能只是糟糕的谷歌技能?)。


1
“我曾以为 .Net Core 项目会将所有依赖项保存在本地。” 实际上,只有当您使用 dotnet publish 生成部署包时,这些依赖项才会变成本地的。自包含部署模式会将所有依赖项放到同一个文件夹中,https://learn.microsoft.com/en-us/dotnet/core/deploying/。不幸的是,此帖子发布之前 Microsoft 创建了新的文档站点,因此任何未来的读者都应该去查看新的文档。 - Lex Li
3个回答

55

更新:

  1. nuget包被安装在全局位置。默认情况下,它通常位于..\Users\[YourUserFolder]\.dnx\packages,但现在似乎已经改变为..\Users\[YourUserFolder]\.nuget\packages

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

nuget locals global-packages -list

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


  1. 默认的 ASP.Net 模板有很多软件包。由于您是第一次尝试,它会尝试获取所有这些数百个软件包。

  2. 您已经在 nuget 全局位置拥有这些软件包,因此它跳过了还原操作。

  3. 删除“1”中指定位置下的 packages 文件夹中的所有内容。

  4. 某些 beta 软件包在那里。您可以转到项目根目录下的 project.json 文件并调整依赖项部分。


2
执行了 "hello world" 控制台应用程序的 dotnet restore,而不是 ASP.Net 应用程序。因此,问题 #2 必须有不同的答案。关于问题 #3,我同意他们到了全球位置……但这不是 NuGet 的默认行为,也不是 .Net Core 的宣传行为。因此,问题 #3 仍需要进一步调查。不过,我会将您的回复标记为答案,并在另一个 Stack Overflow 问题中再次提问。 - Brent Arias
控制台应用程序有相当多的NuGet包。是的,这绝对是真的。但我想问的是为什么它有这么多依赖关系。问题是为什么?此外,您的Github文章链接无法使用。 - Brent Arias
这是因为模板控制台应用程序需要一些额外的 .Net 库,这些库并不是 .Net Core 的本地部分。这些额外的 .Net 库被打包成 Nuget 包,并作为依赖项显示出来。Github 的链接应该可以使用。https://github.com/aspnet/Home/wiki/Package-Locations - Vivek N
我认为链接 github.com/aspnet/Home/wiki/Package-Locations 现在已经过时了,它只会带我到主页。有人能提供一个有效的 package-location 链接吗? - LP13
1
在Linux上,您可以在主目录的隐藏文件夹/home/me/.nuget中找到已下载的NuGet软件包。 NuGet将在第一次请求时下载软件包并存储在此处以供所有项目使用 - 这类似于Java世界中的Maven。 - RPitre
显示剩余2条评论

15

我刚刚发现在.NET core项目中,NuGet包还有另一个存储位置,它位于:

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

我认为这个位置包含普通的.NET Framework包。

更新:感谢brappleye3提供的链接,其中包含了有关dotnet restore的文档资料。


有源链接吗?能看到这是在哪里记录的就更好了——可能还有其他有用的信息。此外,我相信这是除了核心项目以外的所有内容的默认Nuget位置,对吧? - brichins
3
我将包添加到一个.NET Core项目中,但它们最终出现在这个位置,而不是接受答案中的位置。 - Colin Mackay
如果有人想知道osx/linux的位置在哪里,根据dotnet-restore命令文档,"[nuget包缓存]在所有操作系统中都可以在用户主目录下的.nuget/packages目录中找到(例如,在Linux上是/home/user1或在Windows上是C:\Users\user1)。" https://learn.microsoft.com/en-us/dotnet/articles/core/tools/dotnet-restore - brappleye3

2

我正在使用.Net Core 2.xNuGet 4.x。在这里找到了包位置:

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


你发的内容与问题无关。被采纳的答案并不完美,但你不应该这样尝试更新它。 - Lex Li
这是相关的:更多当前的库,新路径。只是一些更新的信息。没有必要因为添加了一些信息而投反对票。 - Jester
1
我进行了负评,不仅因为它与主题无关,而且是错误的。你可以自己构建一个只安装了.NET SDK的干净机器来验证。你根本看不到你所指示的文件夹。如果你的意图是帮助读者,就不要误导他们。 - Lex Li
这很有帮助。我确实在这个目录下有一些包。谢谢@Jester - Henry Ing-Simmons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接