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

时间:2012-01-03 14:18:26

标签: visual-studio-2010 visual-studio msbuild nuget

我使用'Enable NuGet Package Restore'将最近的nuget包恢复功能添加到解决方案中: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

然而,它破坏了我的构建服务器,我没有时间来修复它,所以我想删除它。据我所知,没有选择,所以我从所有* .csproj文件中手动删除了以下行:

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

现在的问题是,每次我的* .csproj文件被检出或打开我的解决方案时,该行会自动再次添加,如果我不小心检查它就会破坏我的构建:(

有关我如何永久删除它的任何想法?

更新:尽管下面的答案仍然在打开解决方案时仍然会回来,但任何人都有同样的问题?

15 个答案:

答案 0 :(得分:212)

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

<RestorePackages>true</RestorePackages>

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

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

<强>更新

原来这是一个持久性的小问题,如果你手动编辑项目文件,确保关闭解决方案并立即删除项目中的所有行,否则他们只是项目重新加载后再次添加......

<强> 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.Targets文件夹中的.nuget内,还有另一部分被添加到新项目中......将其切换为false。

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

答案 1 :(得分:48)

禁用Nuget Package Restore:

  1. 删除.nuget文件夹
  2. 从所有.csproj文件中删除特定行
  3. 要移除的行:

    <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

答案 2 :(得分:8)

这个设置不是吗?

选项...... - &gt; Nuget Package Manager - &gt; [取消选中]允许Nuget下载丢失的软件包

enter image description here

我正在使用Visual Studio Professional + Resharper 8.2

答案 3 :(得分: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

发布了一些信息

答案 4 :(得分:3)

我们实际上有一篇关于它的博客文章,在帖子的最后,提到了一个PowerShell脚本来帮助迁移。

http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

答案 5 :(得分: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

答案 6 :(得分:2)

我按照接受的解决方案使用2012无济于事。但这确实有效,

  1. 完全关闭VS
  2. <RestorePackages>true</RestorePackages>更新为<RestorePackages>false</RestorePackages>并删除<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
  3. 还将nuget.exe重命名为nuget.exe.NotExe

答案 7 :(得分:2)

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

只需运行安装程序(var svg = dimple.newSvg("body", 800, 600); d3.tsv("data.tsv", function (data) { var myChart = new dimple.chart(svg, data); myChart.setBounds(60, 30, 505, 305); myChart.addTimeAxis("x", "Date", "%m/%d/%Y", "%b-%Y"); myChart.addMeasureAxis("y", "Returns"); myChart.addSeries("Name", dimple.plot.line); myChart.addLegend(60, 10, 500, 20, "right"); myChart.draw(); }); 将添加到IFix),然后运行以下内容:

PATH

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

IFix nugetrestore --fix

答案 8 :(得分:1)

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

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

3)然后我不得不删除.nuget和包文件夹。

此时,我有一个完全免费的NuGet解决方案。

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

答案 9 :(得分:1)

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

这个问题不会再次让你感到烦恼。

答案 10 :(得分:1)

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

答案 11 :(得分:0)

我在VS2012 RC中打开项目时意外启用了这个“包恢复”选项,并开始出现类似错误:

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

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

答案 12 :(得分:0)

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

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

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

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

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

希望有所帮助!

答案 13 :(得分:-2)

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

最后,只需复制文件并创建新项目并将其导入解决方案就更容易了。

答案 14 :(得分:-8)

Nuget很糟糕。只需从有问题的项目的根目录中的packages.config中删除nugets并删除或注释package元素。改为使用直接引用到某些lib文件夹中。

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