使用程序包还原时,是否可以自动更新.nuget文件夹中的nuget.exe?


92

自从Nuget 1.5开始,我的团队一直在使用Enable Package Restore选项,以使软件包不受我们的源代码控制。在发布Nuget 1.6时,我们注意到一个问题,即它没有拉下软件包,而是将其跟踪到.nuget文件夹中的Nuget.exe,该文件夹需要更新为1.6以匹配软件包管理器。

Nuget升级后,更新解决方案的最佳方法是什么?我看不出从Studio得知解决方案文件夹中哪个版本的nuget的简便方法。到目前为止,我们已经删除了.nuget文件夹并重新运行Enable Package Restore命令。

Answers:


148

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

nuget.exe update -self

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

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


我在我的一个项目中尝试过此方法。它更新了NuGet.exe,但似乎已从我的解决方案中将其删除。我知道我可以将其添加回去,但这似乎很奇怪。
瑞克

是的,这次我尝试了一次真正的更新,并且也从VS解决方案中删除了nuget.exe。(由于nuget.exe是最新的,所以我以前没有得到)。发生这种情况的原因是,在更新过程中,当前nuget.exe首先移至nuget.exe.old,因此文件引用被破坏了。我怀疑这是否会解决,我会在解决方案关闭的情况下运行命令。
亚历山大·迪翁

似乎进行自我更新不会为您提供新的NuGet.targets文件,这可能是一个问题。我认为NuGet团队在版本1.6和1.7之间对目标文件进行了一些更改。
威廉·格罗斯2012年

@William总那么你可以检查是否有更新,以nuget.org/packages/NuGet.Build(这是包含nuget.targets包)
亚历山大·迪翁

为我工作,只记得以管理员身份运行cmd
Mohammad

31

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


3
+1 -我发现,这是获得更新的最佳方法NuGet.exe ,以及NuGet.targets文件(这也很重要)。只需确保保存对NuGet.targets文件所做的任何自定义设置(例如,自定义PackageSources),以便可以将其重新应用于新文件。
Jesse Webb

非常适合我工作的魅力!感谢您提供的信息
Gayan 2014年

-3

在他的博客上查看David Ebbo的帖子

基本上,您需要做的就是在.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>

1
该问题询问使用包还原时如何自动将nuget.exe更新到最新版本。David Ebbo的博客文章仅介绍了如何使用nuget.exe还原软件包。
2015年

您可能应该指定要回答的问题的哪一部分,然后,在查看问题的标题和接受的答案时,很容易认为这个答案放错了位置
Jens
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.