所以我继承了一个项目,我注意到解决方案根目录下有一个“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://*.com/questions/30406566/nuget-is-removing-packages-on-update-package-reinstall-after-moving-packages-di
解决方法:
如您所述,当您创建一个没有Solution文件夹的项目时,NuGet将在项目的根目录中创建一个packages文件夹.软件包将安装在那里,您的项目将引用项目的packages文件夹中的程序集.
/ProjectA
/packages
当您创建解决方案并将此项目移动到解决方案文件夹中时,您最终得到如下内容:
/Solution
/packages <= solution packages
/ProjectA
/packages <= packages from original project
/ProjectB
一旦您尝试构建此解决方案,NuGet将查看解决方案包文件夹中是否有任何缺少的包(例如来自ProjectA的包).然后,NuGet Package Restore会将缺少的包下载到解决方案包文件夹中.
此外,您添加的任何新软件包将始终安装在解决方案包文件夹中.即使您将程序包安装到具有自己的packages文件夹的ProjectA也是如此.
此时,您应该删除ProjectA中的packages文件夹.不幸的是,这会导致问题.主要问题是ProjectA仍然在其自己的packages文件夹中引用了程序集.删除packages文件夹时,由于缺少引用,您无法构建.
幸运的是,有一个简单的解决方案.只需打开Package Manager控制台并输入:
Update-Package -Reinstall
这将迫使NuGet完成每个项目并卸载/重新安装每个包.这也确保每个引用现在都更新到解决方案包文件夹.注意:由于软件包已经下载,这是一个非常快速的过程,只需要一次修复引用.