Visual Studio:如何使一个解决方案依赖于另一个解决方案?

35

在Visual Studio中,是否可以使一个解决方案依赖于(即包含)另一个完整的解决方案?我看到一些关于“解决方案文件夹”的东西,但这似乎不是同一件事......?谢谢!(顺便说一下,我正在使用VS 2008)

5个回答

21

不完全正确。您必须执行以下操作之一:

  • 创建一个构建脚本以正确顺序构建解决方案。
  • 预先构建解决方案A,并仅在解决方案B中引用其构建的二进制文件输出。
  • 创建第三个解决方案,其中包含两个解决方案中的所有项目。

前两个选项是最常见的,我个人更喜欢第二个选项。


但请查看来自net_prog的答案。 - Jon Coombs
看起来在2009年实际上可能的。无论如何,我希望它在2015年变得更好。 - jpaugh

17

这篇文章虽然有些陈旧,但现在你可以通过为它们构建NuGet包,在其他解决方案中轻松地重用依赖项。VS 2015内置了NuGet包生成功能,但目前还处于候选发布状态。在Visual Studio 2013中,您可以使用Nuget.Packaging NuGet包,使项目能够构建为NuGet包。

然后,您只需将新版本的包发布到本地网络共享,并在Visual Studio中将其配置为仓库。

然后,您的其他解决方案项目就可以依赖该软件包。

例如,假设您在名为“核心框架”的解决方案中拥有一个可重用的Utility DLL,并且您想要在名为“XYZ生态系统”的解决方案中构建的WebSite上使用其中的实用程序。

在CoreFramework解决方案中,您将为编译为实用程序DLL的实用程序项目构建一个NuGet包,并在包中包含DLL及其PDB文件。

然后,您将其发布到您的网络共享中。

因此,假设您的包具有ID“XYZ.Core.Utilities”和版本1.0.0.0。

现在,在XYZEcosystem中,您可以使用包管理器控制台,将存储库下拉列表设置为您的存储库,并键入“Install-Package XYZ.Core.Utilities”,它将安装XYZ.Core.Utilities的最新版本。

如果您对XYZ.Core.Utilities进行更改,则可以在XYZEcosystem上运行Update-Package XYZ.Core.Utilities,它将使用新版本。


8

我已经检查过,这在VS 2019中仍然有效,但是添加的*.sln文件没有被上级*.sln文件引用。因此,对添加的*.sln文件所做的任何更改都不会反映在上级*.sln文件中。如果*.sln文件能够保持分层关系,那就更好了。 - A. David Ing

0
一个解决方案是一组程序集,它们构建以创建某种可执行文件或dll。让一个解决方案依赖于另一个解决方案是没有意义的。输出程序集(可执行文件/dll)依赖于它所引用的程序集。如果您的解决方案依赖于其他程序集,请引用它们。您可以将项目添加到您的解决方案中(文件>添加>现有项目),然后您可以从输出项目中添加对这些项目的引用。

0

你不能这样做。而且你为什么要这样做呢?

只需将所有依赖项项目(即“其他”解决方案中的项目)添加到该解决方案中。

然后在项目之间使用项目引用(而不是文件引用)。


3
我希望依赖于另一个我无法控制的解决方案。如果那个解决方案更新并包括了其他项目,我希望它能自动地考虑到这些变化。 - Robert Fraser
1
在这种情况下,您可以选择:创建一个自动生成解决方案文件的脚本。或者手动将项目添加到解决方案中,并创建一个验证所有项目是否在解决方案中的脚本。解决方案文件是具有相当简单结构的简单文本文件。 - codeape
如果依赖树很深且复杂,人们可能会想要这样做,尽管在 VS 之外的机制可以确保相关的 DLL 文件是最新的并位于正确的位置,如果这些 DLL 文件可在中央受控存储库中使用,则可以节省大量编译时间。 - Denise Skidmore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接