在解决方案文件夹

时间:2015-08-12 20:29:37

标签: visual-studio msbuild continuous-integration nuget nuget-package-restore

设置

我有一个解决方案Commons.sln,其中包含其他更具体项目的常用工具。让我们来看一个名为Cars.sln的特定解决方案,以便更容易探索案例。所有解决方案都有自己的NuGet包。 所有项目都放在同一个VCS分支中,因此文件夹结构非常严格。

我想要达到什么目标?

我想在所有特定项目中引用公共库。因此,我已将Commons.sln的项目添加到Cars.sln。但是我遇到了这个设置的问题,因为我的团队中从未构建Commons.sln的人员没有将此解决方案中的NuGet包下载到他们的计算机上,并且尝试构建Cars.sln时 - 他们面临错误说法找不到来自Commons.sln的项目的dll。

长话短说 - 我想在构建之前执行nuget restore ../../Commons/Commons.sln,但在Visual Studio中的每次构建/重建时都不知道如何在Cars.sln解决方案级别上做得更好。

具体细节信息

我对此做了一些研究,并且有我的要点:

  1. 我不想在VCS中提交任何我的NuGet包
  2. 我是adding a .target file per solution的解决方案,但只有在我直接使用msbuild.exe构建时才有效。
  3. 在其他SO question。建议添加一个项目,然后按照构建顺序解决它,这对我来说似乎很苛刻。
  4. 特定项目绑定到CI服务器,所以这个结构也应该在那里工作(目前我已经解决了添加构建步骤,在其他所有内容之前构建Commons.sln

    任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

目前我已经通过向Commons.sln中的项目添加msbuild目标来修复它,这是对包括特定项目在内的所有项目的依赖,例如Cars.sln

<Target Name="Test" BeforeTargets="BeforeBuild">
  <Message Text="Restoring Common Nugets" Importance="high"></Message>
  <Exec Command="nuget restore &quot;$(ProjectDir)..\Avid.Common.sln&quot;" />
</Target>

然而,如果有人有更好的解决方案,我会很高兴知道它。