NuGet没有丢失包裹

时间:2013-07-22 20:43:30

标签: visual-studio-2010 visual-studio nuget nuget-package

我在VSS中有以下项目结构

enter image description here

现在在 Visual Studio 2010专业版中: 我打开 Solution2 ,然后将 Library1添加为外部项目

Library1引用了两个我通过NuGet获得的外部库。当我构建我的Solution2时,一切正常。 所以我签了我所有的项目。

问题: 当另一个开发人员从sourcesafe和builds获得Solution2时,它说Library1缺少那些外部库dll。

尝试以下内容:

1:http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

所以现在我在Solution2下面有.nuget文件夹,它会被签入。但那仍然没有带来dll。

我怀疑是Library1处于一个单独的解决方案中导致了这个问题。

如何通过NuGet自动获取丢失包的任何想法?

更新
泽维尔的建议有所帮助,这是他的两篇博文:

2 个答案:

答案 0 :(得分:5)

根据您当前的设置,您应确保已在两个解决方案上启用了NuGet Package Restore,并且解决方案2 nuget.targets应将nuget install命令指向{{1 } outputdirectory 。您的文件夹结构如下所示:

Folder structure

原因:Library1.csproj引用指向Solution1 \ Packages位置。将此项目添加到Solution2时,项目引用不会更改,但解决方案将恢复Solution2 \ Packages而不是Solution1 \ Packages中的包。

如果您已经在Solution2的项目中安装了软件包,则需要确保它们仍然针对Solution2 \ Packages进行恢复。为此,我建议您在共享项目文件中设置一个MSBuild属性(在nuget.targets文件的import语句之上),并将此MSBuild属性值传递给RestoreCommand。

E.g:

  

< PackagesOutDir> $(SolutionDir).. \库\软件包< / PackagesOutDir>

调整nuget.targets文件,例如:

  

< PackagesOutDir Condition =“$(PackagesOutDir)==''”> $(SolutionDir)\ Packages< / PackagesOutDir>

     

...

     

< RestoreCommand> ... -o“$(​​PackagesOutDir)”< / RestoreCommand>


(可选),如果您要使用单个“包”文件夹,则可以修改 Solution1\Packages个文件并设置.nuget\NuGet.targets(或 - OutputDirectory)切换-o命令。

将此附加到RestoreCommand元素:-o“$(​​SolutionDir .. \ Packages”将确保所有包在一个位置恢复

enter image description here

请注意,每次安装NuGet软件包后,您都必须手动更新已安装的软件包引用!

答案 1 :(得分:1)

在此处查看我们的答案:Nuget Package restore with git submodule,此选项不涉及任何*.csproj操作