2012-01-03 288 views
143

恢复我加了最近的NuGet包还原功能使用“启用NuGet包还原”的解决方案: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages删除NuGet包从解决方案

但是它打破了我的构建服务器,我没有固定的时间它,所以我想删除它。有这个问题并没有选择,因为据我所知,所以我手动从我所有的* .csproj的文件中删除以下行:

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

现在的问题是,每次我的* .csproj的文件签出或打开我的解决方案,该线路会自动再次加入,打破我的体型,如果我不小心将其签入:(

任何想法如何,我可以永久删除

UPDATE:尽管它下面依旧保持了答案回来时打开解决方案,任何人都有同样的问题?

+2

难道你不能只回滚源代码管理中的变更集? – Betty 2012-01-05 08:17:22

+0

以及它是一个相当大的变更集,但感谢您的评论我确实看了一下,似乎它也在解决方案路径中添加了一个.nuget文件夹,并将其删除以查看它是否修复了问题 – 2012-01-05 12:32:24

+0

您是否管理过修复构建服务器? (并且它是团队?),因为上面引用的导入项目行是导致我的团队构建失败的原因 – Baldy 2012-04-20 12:45:29

回答

206

我没有看非常好,有添加到项目文件的另一个特性:

<RestorePackages>true</RestorePackages> 

只是必须从所有的* .csproj的文件,手动删除这个问题,以及所有这些行:

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

UPDATE:

原来这是一个持续的小开溜,如果你手动编辑您的项目文件,确保关闭该解决方案,并删除在t所有行他在一次项目,否则他们只是再次添加一旦该项目重新加载...

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> 

UPDATE4

地处.nuget文件夹中的NuGet.Targets里面,有一个被添加到新项目的另一部分...它转换为false。

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

我发现还有一个''在需要手动删除的.csproj文件末尾。 – TimDog 2012-04-01 20:37:40

+0

@TimDog,这是问题的一部分:) – 2012-04-02 07:25:31

+6

哈! *慢慢退回* :) – TimDog 2012-04-02 20:57:31

0

我不小心启用此“包还原”选项,同时打开我的VS2012 RC项目,并开始变得看起来像错误:无法找到“C

“错误1:\ FolderX \ SomeProject。 nuget \ nuget.exe'“

要修复错误,我按照上面的说明,打开记事本中的每个项目文件,并删除该RestorePackage行。

-2

我遇到了完全相同的问题,并试图删除所有。nuget和RestorePackage标签,但是一个项目不会重新加载,不管我对.nuget和RestorePackages标签进行了多深的检查。我想这里有一些隐藏的引用。

最后,只需复制文件并创建一个新项目并将其导入到解决方案中就简单多了。

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

+0

谢谢安德烈亚斯,这是一个更简洁的总结... – 2013-02-01 15:42:13

+0

我为NuGet团队创建了一个问题来解决这个问题。请上去投票https://nuget.codeplex.com/workitem/3756 – deadlydog 2013-10-16 20:58:15

+1

谢谢,对我来说这只是取消选项 – 2014-02-21 13:25:12

0

我能够通过采取这些措施来解决这个问题:

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

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

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

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

希望有帮助!

1

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

2)然后我删除了整个解决方案中的所有package.config文件。 3)然后我不得不删除.nuget和包文件夹。

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

4)然后,我手动引用任何需要的DLL并打编译和解决方案运行像一个冠军,而不需要NuGet包。

2

我采用了接受的解决方案,无济于事。这没有工作,虽然,

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

解决方案目前正在使用的MSBuild集成包还原可以迁移到自动软件包还原。据我所知,这应该有助于那些遇到CI的人建立问题。 (如果我错了,请纠正我)。

请参阅文件中的NuGet网站:迁移的MSBuild集成的解决方案使用自动包还原为http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

有信息有使用和不使用TFS转换。

大卫博还张贴在http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html

1

一些信息转至您有[$(SolutionDir)\.nuget\nuget.targets] .nuget文件夹,并在它之下nuget.targets文件删除该文件夹, 和变化从的csproj删除线,一旦最后一次您的解决方案目录。

这个问题不会再回到bug你。

9

难道这个设置在这里吗?

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

enter image description here

我使用Visual Studio专业+ ReSharper的8.2

+0

我删除了包文件夹并清除了包缓存来解决我的问题。谢谢! – Tresto 2015-06-19 18:37:57

+1

不,它不会更新.proj文件 - 所以问题返回 - 但在这里也很好:-) – schmoopy 2015-09-26 00:10:51

+0

输出窗口在建立时显示:'恢复NuGet包...防止NuGet从构建过程中恢复的包,打开Visual Studio的选项对话框中,单击包管理器节点上,取消选中“允许的NuGet到build.''它仅仅是一个确认,这应该是要走的路过程中下载缺失的软件包。 – 2016-05-03 09:53:14

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

-8

Nuget糟透了。只要从项目的根目录中的packages.config中删除或者注释包含这些问题的软件包元素即可。相反,使用直接引用到一些lib文件夹中。

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

如果你不知道如何使用它,并且没有努力去理解它,那么它就像任何其他产品一样“吮吸”。 – 2014-11-25 15:03:29

+0

这是真的,但是在我的选择中,它并没有给你足够的控制权。 此外Nuget GUI需要一些严重的升级。 1.它不是直观的, 2.它很难管理包 3.它很难关闭恢复 4.下载不需要的包 5.有时它不能恢复pacakges – 2014-11-27 08:24:58

+0

我同意在某种程度上,尽管我认为它确实没有包管理器。看起来他们正在努力为nuget 3.0进行严格的GUI升级:http://blog.nuget.org/20141112/nuget-3.0-preview.html – 2014-11-27 13:16:42

2

对于任何需要仍然使用旧的风格NuGet包恢复到清理项目,可here iFIX的自动化工具的过程。

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

IFix nugetrestore --fix 

可以在检查模式下运行它首先,看看它会清理:

IFix nugetrestore --check 
0

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