我使用“启用 NuGet 包还原”将最近的 nuget 包还原功能添加到解决方案中:http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages
但是它破坏了我的构建服务器,我没有时间修复它,所以我想删除它。据我所知,没有选择,所以我从我的所有 *.csproj 文件中手动删除了以下行:
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
现在的问题是,每次我的 *.csproj 文件被签出或打开我的解决方案时,都会自动再次添加该行,如果我不小心签入它会破坏我的构建:(
有什么想法可以永久删除它吗?
更新:尽管下面的答案在打开解决方案时仍然会不断出现,有同样问题的人吗?
我看起来不太好,项目文件中添加了另一个属性:
<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>
要禁用 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 下载丢失的包
https://i.stack.imgur.com/mGAET.png
我正在使用 Visual Studio Professional + Resharper 8.2
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/
文件夹并修改您的 .csproj
以引用一个 .targets
文件。您应该将 nuget.exe
提交给您的 VCS(eww,解决了 nuget 解决的问题!)和这样的丑陋。如今,msbuild /restore
存在并且 VS 的内置包还原。 OP 正在询问如何删除旧的、糟糕的做事方式——而不是如何禁用 VS 正确的内置包恢复支持。
当前使用 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 上发布了一些信息
我们实际上有一篇关于它的博客文章,在文章的最后提到了一个 powershell 脚本来帮助迁移。
http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore
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
我使用 2012 遵循公认的解决方案无济于事。但这确实有效,
完全关闭 VS 将
对于仍需要使用旧式 NuGet 包还原清理项目的任何人,可用的 IFix 工具 here 可自动执行该过程。
只需运行安装程序(IFix
将添加到 PATH
),然后运行以下命令:
IFix nugetrestore --fix
你可以先在检查模式下运行它,看看它会清理什么:
IFix nugetrestore --check
我遇到过同样的问题。我最终做了什么:1)进入解决方案中的每个项目.csproj文件,在记事本中打开它,然后删除xml的一部分并保存。
2)然后我删除了整个解决方案中的所有 package.config 文件。
3)然后我必须删除 .nuget 和 package 文件夹。
至此,我有了一个完全免费的 NuGet 解决方案。
4)然后我手动引用任何需要的 DLL 并点击编译,解决方案运行起来就像一个冠军,不需要 NuGet 包。
转到您有 [$(SolutionDir)\.nuget\nuget.targets] .nuget
文件夹和 nuget.targets
文件的解决方案目录,删除该文件夹,最后一次更改 csproj 中的删除行。
问题不会再次困扰您。
删除解决方案中的 packages.config 文件。
在 VS2012 RC 中打开我的项目时,我不小心启用了这个“包还原”选项,并开始收到类似于以下内容的错误:
“错误 1 无法找到 'C:\FolderX\SomeProject.nuget\nuget.exe'”
为了修复错误,我按照上述说明打开了记事本中的每个项目文件并删除了该 RestorePackage 行。
我能够通过以下步骤解决此问题:
1) 确保备份所有当前签出的文件更改。
2) 从 C:\(映射到 TFS 的路径)中物理删除解决方案文件夹。
3) 从 TFS 获取最新的解决方案。
4) 从您在步骤 1 中进行的备份中复制(如果有)您的更改。
希望有帮助!
我遇到了完全相同的问题,并试图从项目文件中删除所有 .nuget 和 RestorePackage 标记,但是无论我多么彻底地检查了 .nuget 和 RestorePackages 标记,一个项目都不会重新加载。我想在某个地方有一些隐藏的引用。
最后,只需复制文件并创建一个新项目并将其导入解决方案就更容易了。
Nuget 很烂。只需删除 nugets 并从存在问题的项目根目录中的 packages.config 中删除或注释包元素。改为使用对某些 lib 文件夹的直接引用。
<?xml version="1.0" encoding="utf-8"?>
<packages>
<!--<package id="EntityFramework" version="6.0.2" targetFramework="net45" />-->
</packages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
需要手动删除。