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

Posted

技术标签:

【中文标题】从解决方案中删除 nuget 包还原【英文标题】:remove nuget package restore from solution 【发布时间】:2012-02-01 13:44:09 【问题描述】:

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

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

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

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

有什么办法可以永久删除它吗?

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

【问题讨论】:

你不能只回滚源代码管理中的变更集吗? 嗯,这是一个相当大的变更集,但是感谢您的评论,我确实看了看,似乎它还在解决方案路径中添加了一个 .nuget 文件夹,也将其删除以查看是否解决问题 您是否设法修复了构建服务器? (它是 teamcity 吗?),因为您在上面引用的导入项目行是导致我的 teamcity 构建失败的原因 @Baldy 不,我们正在使用 TFS Build,我并没有真正寻找解决方案,只是将其删除(仍计划稍后深入研究) 我为 NuGet 团队创建了一个问题来解决此问题。请在nuget.codeplex.com/workitem/3756上投票 【参考方案1】:

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

<RestorePackages>true</RestorePackages>

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

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

更新:

事实证明这是一个顽固的小虫子,如果您手动编辑项目文件,确保关闭解决方案并立即从项目中删除所有行,否则它们只是项目重新加载后再次添加...

更新 2:

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

更新3:

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

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

【讨论】:

我发现.csproj文件末尾还有一个&lt;Import Project="$(SolutionDir)\.nuget\nuget.targets" /&gt;需要手动删除。 哈! 慢慢后退 :) 这件事也一直困扰着我。如果您的项目在许多不同的解决方案中,包还原功能会导致大量问题。 “确保关闭解决方案”实际上在这里至关重要,因为 VS2010 似乎缓存了 csproj/msbuild 文件(没有进行某些修改)。在 VS2012 中我没有注意到这种行为,但是在 VisualStudio 中修改这些文件时,这一直困扰着我。 我为 NuGet 团队创建了一个问题来解决此问题。请在nuget.codeplex.com/workitem/3756上投票【参考方案2】:

禁用 Nuget 包还原:

    删除 .nuget 文件夹 从所有 .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上投票 谢谢,对我来说,这只是禁用该选项 我使用 IFix 工具在清理许多项目的存储库方面取得了巨大成功。它基本上自动化了这些步骤。 visualstudiogallery.msdn.microsoft.com/… .nuget 文件夹已隐藏,您需要将其从目录中删除,而不仅仅是项目。【参考方案3】:

这里不就是这个设置吗?

选项... -> Nuget 包管理器 -> [取消选中] 允许 Nuget 下载丢失的包

我正在使用 Visual Studio Professional + Resharper 8.2

【讨论】:

我删除了包文件夹并清除了包缓存以解决我的问题。谢谢! 不,它不会在之后更新 .proj 文件 - 所以问题又回来了 - 但在这里也很好:-) 构建时输出窗口会显示: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.' 这只是确认这应该是要走的路。 这与 Nuget 包还原无关。旧版本的 VS 有一个 context menu item for projects titled “Enable Nuget Package Restore” ,它将创建一个 .nuget/ 文件夹并修改您的 .csproj 以引用 .targets 文件。您应该将 nuget.exe 提交给您的 VCS(eww,解决 nuget 解决的问题!)和这样的丑陋。现在msbuild /restore已经存在,VS自带的包还原。 OP 正在询问如何删除旧的、糟糕的做事方式,而不是如何禁用 VS 正确的内置包恢复支持。【参考方案4】:

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

请参考 nuget 网站上的文档:Migrating MSBuild-Integrated Solutions to use Automatic Package Restore at 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 上发布了一些信息

【讨论】:

【参考方案5】:

我们实际上有一篇关于它的博客文章,并且在文章末尾提到了一个 powershell 脚本来帮助迁移。

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

我在 2012 年遵循公认的解决方案无济于事。但这确实有效,

    完全关闭VS 将&lt;RestorePackages&gt;true&lt;/RestorePackages&gt; 更新为&lt;RestorePackages&gt;false&lt;/RestorePackages&gt; 并删除&lt;Import Project="$(SolutionDir)\.nuget\nuget.targets" /&gt; 行 还将nuget.exe 重命名为nuget.exe.NotExe

【讨论】:

【参考方案8】:

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

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

IFix nugetrestore --fix

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

IFix nugetrestore --check

【讨论】:

【参考方案9】:

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

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

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

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

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

【讨论】:

【参考方案10】:

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

问题不会再次困扰您。

【讨论】:

【参考方案11】:

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

【讨论】:

【参考方案12】:

我在 VS2012 RC 中打开我的项目时不小心启用了这个“包还原”选项,并开始收到类似于以下内容的错误:

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

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

【讨论】:

【参考方案13】:

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

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

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

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

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

希望有帮助!

【讨论】:

【参考方案14】:

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

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

【讨论】:

【参考方案15】:

Nuget 很烂。只需删除 nugets 并从存在问题的项目根目录中的 packages.config 中删除或注释包元素。改为使用对某些 lib 文件夹的直接引用。

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

【讨论】:

如果您不知道如何使用它并且不努力理解它,它就像任何其他产品一样“糟糕”。 没错,但在我看来,轻推并不能让您对项目有足够的控制权。此外,Nuget GUI 需要进行一些重大升级。 1. 不直观 2. 包管理难 3. 恢复难关 4. 下载不需要的包 5. 有时无法恢复包 我在某种程度上同意,尽管我认为它确实比没有包管理器要好。似乎他们正在为 nuget 3.0 进行重大的 GUI 升级:blog.nuget.org/20141112/nuget-3.0-preview.html

以上是关于从解决方案中删除 nuget 包还原的主要内容,如果未能解决你的问题,请参考以下文章

NuGet 包还原 + NuGet 源设置

1分钟解决VS每次运行都显示“正在还原nuget程序包”问题

VS 中NuGet 尝试还原程序包时出错"*"已拥有为"**"定义的依赖项

如何解决 Visual Studio 中的“NuGet 包还原失败”?

使用NUGet自动下载(还原)项目中使用的包

VS一直停留在“正在还原nuget程序包”