ChatGPT解决这个技术问题 Extra ChatGPT

使用包还原时,有没有办法自动更新 .nuget 文件夹中的 nuget.exe?

自 Nuget 1.5 以来,我的团队一直在使用启用包还原选项来使包不受我们的源代码控制。当 Nuget 1.6 发布时,我们注意到一个问题,即它没有将包拉下来,并将其追踪到 .nuget 文件夹中的 Nuget.exe,需要更新到 1.6 以匹配包管理器。

更新 Nuget 后,更新解决方案的最佳方法是什么?我没有从工作室看到一个简单的方法来判断解决方案文件夹中的 nuget 版本。到目前为止,我们清除了 .nuget 文件夹并重新运行 Enable Package Restore 命令。


A
Alexandre Dion

我建议从命令行使用以下命令更新 .nuget\nuget.exe:

nuget.exe update -self

[编辑]:首先关闭 VS 解决方案。如果有更新并打开解决方案,则将从解决方案中删除 nuget.exe。

您可以通过修改 .nuget\nuget.targets 以添加上述命令,在还原时自动更新 nuget.exe。我将以那里的恢复命令为例。但我不确定它是否值得,nuget.exe 更新并不常见,并且向后兼容性应该很少中断。


我在我的一个项目上试过这个。它更新了 NuGet.exe,但似乎已将其从我的解决方案中删除。我知道我可以把它加回来,但这似乎很奇怪。
啊,对了,这次我尝试了真正的更新,并且 nuget.exe 也从我的 VS 解决方案中删除了。 (因为 nuget.exe 是最新的,所以我以前没有得到它)。发生这种情况是因为在更新期间,当前 nuget.exe 首先移动到 nuget.exe.old,因此文件引用被破坏。我怀疑这会得到解决,我会在解决方案关闭的情况下运行命令。
似乎进行自我更新不会为您提供新的 NuGet.targets 文件,这可能是个问题。我认为 NuGet 团队在 1.6 和 1.7 版本之间对目标文件进行了一些更改。
@William Gross 好吧,您可以检查 nuget.org/packages/NuGet.Build 是否有更新(即包含 nuget.targets 的包)
为我工作,只记得以管理员身份运行 cmd
C
Chris Kirby

我发现处理此问题的最佳方法是简单地删除 .nuget 文件夹并重新启用解决方案范围的包还原。如上所述,您可以在构建中添加自我更新命令,但如果版本之间发生更改(或从解决方案中删除引用),则不会更新目标或配置文件。也许这没什么大不了的,但这是确保您拥有最新的 exe 和配置文件的可靠方法。归根结底,只有在您需要访问新命令或新版本最终出现重大更改时,更新才是一个问题。


+1 - 我发现这是获取 NuGet.exe 以及 NuGet.targets 文件更新的最佳方式(这也很重要)。只需确保保存对 NuGet.targets 文件所做的任何自定义(例如自定义 PackageSources),以便您可以将它们重新应用到新文件。
太好了,对我来说就像魅力一样!谢谢提供信息
这么多年过去了,但是.... 这救了我的命。非常感谢!
R
Rodolpho Brock

See David Ebbo's post at his blog

基本上,您需要做的就是在 .sln 文件旁边创建一个 NuGet.Config 文件,其中包含:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear/>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="aspnetwebstacknightlyrelease" value="https://www.myget.org/f/aspnetwebstacknightlyrelease/" />
  </packageSources>
</configuration>

该问题询问如何在使用包还原时自动将 nuget.exe 更新到最新版本。 David Ebbo 的博客文章仅说明了如何使用 nuget.exe 恢复包。
您可能应该指定您回答的问题的哪一部分,在查看问题的标题和接受的答案时,很容易认为这个答案放错了位置......