5

我在 VSS 中有以下项目结构

在此处输入图像描述

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

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

问题: 当另一个开发人员从 sourcesafe 获取 Solution2 并进行构建时,它说 Library1 缺少那些外部库 dll。

尝试以下:

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

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

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

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

更新:
Xavier 的建议有所帮助,以下是他的两篇博文:

4

2 回答 2

5

使用当前设置,您应该确保在两个解决方案上都启用了 NuGet 包还原,并且Solution2nuget.targets应该将 nuget install 命令指向Solution1\Packagesoutputdirectory。您的文件夹结构将如下所示:

文件夹结构

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

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

例如:

<PackagesOutDir>$(SolutionDir)..\Libraries\Packages</PackagesOutDir>

并调整 nuget.targets 文件,例如:

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

...

<RestoreCommand>... -o "$(PackagesOutDir) "</RestoreCommand>


或者,如果您想使用单个 Packages 文件夹,您可以修改这两个 .nuget\NuGet.targets文件并-o为命令设置(或 -OutputDirectory)开关nuget install

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

在此处输入图像描述

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

于 2013-07-23T07:29:58.510 回答
2

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

于 2017-05-18T13:36:30.533 回答