ChatGPT解决这个技术问题 Extra ChatGPT

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

我使用“启用 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 上投票

C
Chase Florell

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

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

要禁用 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 文件夹是隐藏的,您需要将其从目录中删除,而不仅仅是项目。
o
orad

这里不就是这个设置吗?

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

https://i.stack.imgur.com/mGAET.png

我正在使用 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 正确的内置包恢复支持。
J
James Bradt

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

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

那里有关于使用和不使用 TFS 进行转换的信息。

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


D
Dan Liu

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

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


N
Nitin Agarwal

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


D
Daryl

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

完全关闭 VS 将 true 更新为 false 并删除 行也重命名了 nuget .exe 到 nuget.exe.NotExe


S
Simon Fox

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

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

IFix nugetrestore --fix

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

IFix nugetrestore --check

A
Andy30acre

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

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

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

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

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


P
Peter O.

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

问题不会再次困扰您。


L
Latency

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


D
Dmitry Lyalin

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

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

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


R
Rajesh

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

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

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

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

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

希望有帮助!


P
Peter

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

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


I
Igor N

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