从解决方案中删除nuget包还原


148

我将最近的nuget软件包还原功能添加到使用“启用NuGet软件包还原”的解决方案中:http ://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

但是它损坏了我的构建服务器,并且我没有时间修复它,因此我想删除它。据我所知,这是没有选择的,因此我从所有* .csproj文件中手动删除了以下行:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

现在的问题是,每次我的* .csproj文件签出或打开我的解决方案时,该行都会自动再次添加,如果我不小心在:(

有什么想法可以将其永久删除吗?

更新:尽管下面的答案仍然存在,但在打开解决方案时仍然会出现问题,有人遇到同样的问题吗?


2
您是否只能回滚Source Control中的更改集?
贝蒂2012年

好吧,这是一个很大的变更集,但是感谢您的评论,我确实看了一眼,看来它还在解决方案路径中添加了.nuget文件夹,并删除了该文件夹以查看是否可以解决问题
Wiebe Tijsma

您是否设法修复了构建服务器?(这是teamcity吗?),因为您在上面引用的导入项目行是导致我的teamcity构建失败的原因
Baldy

@Baldy不,我们使用的是TFS Build,我并不是真的在寻找解决方案,只是删除了它(仍计划稍后再潜水)
Wiebe Tijsma 2012年

3
我为NuGet团队创建了一个问题来解决此问题。请在nuget.codeplex.com/workitem/3756
Deadlydog 2013年

Answers:


214

我看起来不太好,在项目文件中添加了另一个属性:

<RestorePackages>true</RestorePackages>

只需从所有* .csproj文件中手动删除此行以及所有这些行即可:

  <Import Project="$(SolutionDir)\.nuget\nuget.targets" />

更新:

事实证明,这是一个持久的小bug,如果您手动编辑项目文件,请确保关闭解决方案并立即删除项目中的所有行,否则一旦重新加载项目便会再次添加它们。

UPDATE2:

也从解决方案根目录中删除.nuget文件夹

UPDATE3:

NuGet的更高版本添加了您需要删除的另一部分:

 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>

更新4

NuGet.Targets在该.nuget文件夹的内部,还有另一个部分被添加到新项目中……将其切换为false。

<!-- We need to ensure packages are restored prior to assembly resolve -->
<BuildDependsOn Condition="$(RestorePackages) == 'false'">
    RestorePackages;
    $(BuildDependsOn);
</BuildDependsOn>

7
我发现<Import Project="$(SolutionDir)\.nuget\nuget.targets" />.csproj文件的末尾还有一个需要手动删除的文件。
TimDog 2012年

6
哈!慢慢
退后

5
这件事也困扰着我。如果您的项目有许多不同的解决方案,则包还原功能会引起很多问题。
达米安2012年

7
实际上,“确保关闭解决方案”在这里非常重要,因为VS2010似乎可以缓存csproj / msbuild文件(不进行某些修改)。我在VS2012中没有注意到这种行为,但是在VisualStudio中修改这些文件时,这困扰了我很多。
Xavier Decoster 2012年

4
我为NuGet团队创建了一个问题来解决此问题。请在nuget.codeplex.com/workitem/3756
Deadlydog 2013年

48

要禁用Nuget软件包还原:

  1. 删除.nuget文件夹
  2. 从所有.csproj文件中删除特定行

要删除的行:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
<RestorePackages>true</RestorePackages>

注意:确保在重新加载解决方案之前一次性完成所有更改,否则它将重新添加它们。

这是基于以下文章:http : //bartwullems.blogspot.no/2012/08/disable-nuget-package-restore.html

另外,您可能需要仔细检查是否已禁用此选项:http : //docs.nuget.org/docs/workflows/using-nuget-without-committing-packages


我为NuGet团队创建了一个问题来解决此问题。请在nuget.codeplex.com/workitem/3756
Deadlydog 2013年

1
谢谢,对我来说,这只是一个选择-Maarten
Kieft

我使用IFix工具在清理许多项目的存储库方面取得了巨大的成功。它基本上可以自动执行这些步骤。visualstudiogallery.msdn.microsoft.com/…–
angularsen

.nu​​get文件夹是隐藏的,您需要将其不仅从项目中从目录中删除。
Erik Bergstedt

8

这不是这里的设置吗?

选项...- > Nuget软件包管理器 -> [取消选中]允许Nuget下载缺少的软件包

在此处输入图片说明

我正在使用Visual Studio Professional + Resharper 8.2


我删除了packages文件夹并清除了包缓存以解决我的问题。谢谢!
Tresto

1
不,它不会在之后更新.proj文件-因此问题又回来了-但也可以在这里这样做:-)
schmoopy 2015年

输出窗口在构建时会显示此内容:Restoring NuGet packages... To prevent NuGet from restoring packages during build, open the Visual Studio Options dialog, click on the Package Manager node and uncheck 'Allow NuGet to download missing packages during build.'这只是确认这是一种方法。
穆斯林本·达欧

1
这与Nuget软件包还原无关。VS的旧版本有一个用于项目上下文菜单项,标题为“ Enable Nuget Package Restore”,它将创建一个.nuget/文件夹并修改您.csproj.targets文件以引用文件。您应该将nuget.exeVC 提交到您的VCS(eww,解决nuget解决的问题!)和类似的丑陋方法。如今,msbuild /restore存在并且VS的内置程序包已还原。OP正在询问如何删除旧的,糟糕的处理方式,而不是如何禁用VS的正确内置软件包还原支持。
宾基

5

当前使用MSBuild集成程序包还原的解决方案可以迁移到自动程序包还原。据我了解,这应该会帮助那些遇到CI的人。(如果我弄错了,请纠正我)。

请参阅文档的NuGet网站:迁移的MSBuild集成的解决方案使用自动包装在恢复http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

有和没有TFS的转换信息。

David Ebbo还在http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html上发布了一些信息



3

NuGet有一篇有关迁移到自动程序包还原的博客文章:http : //docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

博客文章中引用了一个Powershell脚本,该脚本将自动(并递归)删除必要的行https : //github.com/owen2/AutomaticPackageRestoreMigrationScript/blob/master/migrateToAutomaticPackageRestore.ps1

直接提供“禁用NuGet软件包还原”选项被标记为“无法修复”:https : //nuget.codeplex.com/workitem/1883


2

我在2012年使用了公认的解决方案,但无济于事。尽管确实如此,

  1. 完全关闭VS
  2. 更新<RestorePackages>true</RestorePackages><RestorePackages>false</RestorePackages>并删除该<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
  3. 也改名nuget.exenuget.exe.NotExe

2

对于仍然需要使用旧式NuGet包还原来清理项目的任何人,此处提供的IFix工具可自动执行该过程。

只需运行安装程序(IFix将添加到中PATH),然后运行以下命令:

IFix nugetrestore --fix

您可以先在检查模式下运行它以查看将要清除的内容:

IFix nugetrestore --check

1

我遇到过同样的问题。我最终要做的是:1)进入解决方案中的每个项目.csproj文件,在记事本中打开它,然后删除xml的一部分并保存。

2)然后我删除了整个解决方案中的所有package.config文件。

3)然后我必须删除.nuget和package文件夹。

在这一点上,我有一个完全免费的NuGet解决方案。

4)然后,我手动引用了所有需要的DLL,然后进行了编译,该解决方案像冠军般运行,而无需使用NuGet软件包。


1

转到您的解决方案目录,在该目录下有[$(SolutionDir)\.nuget\nuget.targets] .nuget文件夹和nuget.targets文件,然后删除该文件夹,并最后一次更改csproj中的删除行。

问题不会再次困扰您。


1

在解决方案中删除packages.config文件。


0

我在VS2012 RC中打开项目时不小心启用了此“包还原”选项,并开始出现类似以下错误:

“错误1无法找到'C:\ FolderX \ SomeProject.nuget \ nuget.exe”

为了纠正错误,我按照上面的说明进行操作,在记事本中打开每个项目文件,然后删除该RestorePackage行。


0

通过执行以下步骤,我能够解决此问题:

1)确保备份所有当前已检出文件的更改。

2)从C:\(映射到TFS的路径)上物理删除解决方案文件夹。

3)从TFS获取最新的解决方案。

4)复制(如果有)您在步骤1中所做的备份中的更改。

希望能有所帮助!


-2

我遇到了完全相同的问题,并尝试从项目文件中删除所有.nuget和RestorePackage标记,但是无论我多么彻底地检查了.nuget和RestorePackages标记,一个项目都不会重新加载。我猜在某处有一些对此的隐藏引用。

最后,仅复制文件并创建一个新项目,然后将其导入解决方案就容易了。


-8

Nuget很烂。只需删除nuget并从存在问题的项目的根目录中的packages.config中删除或注释包元素即可。而是使用直接引用到某个lib文件夹中。

<?xml version="1.0" encoding="utf-8"?>
  <packages>
    <!--<package id="EntityFramework" version="6.0.2" targetFramework="net45" />-->
  </packages>

和其他产品一样,如果您不知道如何使用它并且不花力气去理解它,它就会“烂透了”。
Wiebe Tijsma 2014年

那是真的,但根据我的看法,轻推并不能使您对项目有足够的控制权。Nuget GUI也需要进行一些认真的升级。1.它不直观,2.难以管理软件包3.难以关闭还原4.下载不需要的软件包5.有时无法还原软件包
Igor N

我在某种程度上同意,尽管我认为完全没有包管理器确实比打败。似乎他们正在为nuget 3.0进行严重的GUI升级:blog.nuget.org/20141112/nuget-3.0-preview.html
Wiebe Tijsma 2014年
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.