发现/找到"包裹的物理位置"目录项目实际上用于已安装的Nuget包

时间:2015-05-18 23:43:14

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

所以我继承了一个项目,我注意到有一个"包"解决方案根目录下的目录和第二个"包"作为解决方案一部分的项目内的目录。

我希望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

2 个答案:

答案 0 :(得分:7)

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

/ProjectA
   /packages

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

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

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

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

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

幸运的是,有一个简单的解决方案。只需打开Package Manager控制台并输入:

Update-Package -Reinstall

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

答案 1 :(得分:0)

因此,在尝试了@ Kiliman的解决方案并且遇到了数小时的破坏引用等问题之后,我看到了#34;启用包恢复&#34;右键单击解决方案时。这是评论中@Asad的解决方案。

Nuget开发人员还建议您只启用Package Restore,不要将包检入源代码管理。

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