c# - 发现/查找项目实际用于安装的 Nuget 包的 "packages"目录的物理位置

标签 c# asp.net-mvc visual-studio-2012 nuget

所以我继承了一个项目,我只是注意到在解决方案根目录下有一个“packages”目录,在作为解决方案一部分的项目中有第二个“packages”目录。

我希望 Nuget 没有混合使用安装包的两个位置,当然我想使用解决方案根级别来存储/引用包。

除了查看每个 DLL 上的 F4 属性之外,有什么方法可以找到项目用于包的实际物理位置,因为这对我处理 Javascript Nuget 包没有帮助,而且,有没有办法在不卸载并重新安装每个包的情况下更改物理引用?

更新 更新这个答案以分享我到目前为止所做的,即使我还没有找到解决方案

所以我删除了ProjectA中的packages目录并提交给TFS。

然后我关闭了 Visual Studio 2012 并确保我的 ProjectA/packages.config 保持完整,没有任何变化。

我构建了 ProjectA 并出现了引用错误。然后我尝试运行 Update-Package -Reinstall 并且这只是物理删除了我的大部分包并且没有重新安装它们。

我检查了我的 Nuget.config,我检查了我的 .csproj 我删除了 csproj.user 和 .suo 文件。我反复关闭 Visual Studio 2012。没有什么能再次给我一个好的构建,没有什么能恢复我的 Nuget 包,我问了一个新问题: https://stackoverflow.com/questions/30406566/nuget-is-removing-packages-on-update-package-reinstall-after-moving-packages-di

最佳答案

如您所述,当您创建一个没有 Solution 文件夹的项目时,NuGet 将在您的项目的根目录中创建一个 packages 文件夹。包将安装在那里,您的项目将引用项目包文件夹中的程序集。

/ProjectA
   /packages

当您创建解决方案并将此项目移动到解决方案文件夹中时,您最终会得到如下内容:

/Solution
   /packages  <= solution packages
   /ProjectA
      /packages  <= packages from original project
   /ProjectB

一旦您尝试构建此解决方案,NuGet 将查看解决方案包文件夹中是否缺少任何包(例如来自 ProjectA 的包)。然后,NuGet 包还原会将那些丢失的包下载到解决方案包文件夹中。

此外,您添加的任何新包都将始终安装在解决方案包文件夹中。即使您将包安装到具有自己的包文件夹的 ProjectA。

此时,您应该删除 ProjectA 中的 packages 文件夹。不幸的是,这会导致问题。主要问题是 ProjectA 仍然在其自己的包文件夹中引用程序集。当您删除 packages 文件夹时,由于缺少引用而无法构建。

幸运的是,有一个简单的解决方法。只需打开包管理器控制台并输入:

Update-Package -Reinstall

这将强制 NuGet 遍历每个项目并卸载/重新安装每个包。这也确保每个引用现在都更新到解决方案包文件夹。注意:由于包已经下载,这是一个非常快速的过程,只需要一次来修复引用。

关于c# - 发现/查找项目实际用于安装的 Nuget 包的 "packages"目录的物理位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30314527/

相关文章:

c# - 在 C# 中使用正则表达式解析带有日期和时间戳的文本

exception - VS2012 不会因为新项目的异常而中断

c# - 在c#中将点移动到另一个

c# - 行的最小高度 [Migradoc]

c# - 应用程序崩溃,事件名称为 CLR20r3?

asp.net-mvc - Web部署/发布是否添加了未知的连接字符串?

javascript - 如何获取表单中的字段名称

jquery - Bootstrap 模态 : load data for supplied ID

visual-studio-2010 - 未能成功启动或连接到子 MSBuild.exe 进程

c++ - 如何修复此编译错误 : (compiler file 'f:\dd\vctools\compiler\cxxfe\sl\p1\c\template.cpp' , 行 22679)?