发现/找到“包”的物理位置;项目实际用于安装Nuget包的目录

本文关键字:用于 安装 Nuget 项目 位置 找到 发现 | 更新日期: 2023-09-27 17:49:42

所以我继承了一个项目,我刚刚注意到在解决方案根目录有一个"packages"目录,第二个"packages"目录在一个项目中,是解决方案的一部分。

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

是否有一种方法,我可以找到实际的物理位置,一个项目正在使用一个包,而不是看每个DLL上的F4属性,因为这并不能帮助我与Javascript Nuget包,也,有没有一种方法来改变物理参考而不卸载和重新安装每个包?

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

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

然后我关闭了Visual Studio 2012,并确保我的ProjectA/packages。配置保持完整,没有更改。

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

我检查我的Nuget。配置,我检查了我的。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

发现/找到“包”的物理位置;项目实际用于安装Nuget包的目录

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

/ProjectA
   /packages

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

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

一旦您尝试构建此解决方案,NuGet将查看解决方案包文件夹中是否有任何丢失的包(例如来自ProjectA的包)。NuGet Package Restore会将这些丢失的包下载到solution packages文件夹中。

另外,您添加的任何新包将始终安装在解决方案包文件夹中。即使你把一个包安装到ProjectA,它有自己的packages文件夹。

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

幸运的是,有一个简单的修复方法。只需打开包管理器控制台并输入:
Update-Package -Reinstall

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

所以在尝试了@Kiliman的解决方案,并且有几个小时的问题与破碎的引用等,我看到了"启用包恢复"时右键单击解决方案。这是@Asad在评论中的解决方案。

Nuget开发人员还建议您只启用包还原,不要将您的包签入到源代码控制。

这在一些构建服务器设置上增加了一层复杂性,你必须确保MsBuild恢复包,但总的来说它是一个平滑的事务,比将包检入到源代码控制中要好得多。