如何在Visual Studio中构建多项目解决方案而不会在二进制文件之间存在依赖关系?

时间:2012-11-28 22:01:26

标签: c# visual-studio-2010 .net-4.0

我正在使用Visual Studio 2010 Pro构建包含两个项目的解决方案。项目A包含我的大部分源代码,而项目B旨在独立运行,但必须使用项目A中包含的一些源代码。

在当前配置下,项目A包含在项目B中作为参考。我希望能够独立构建和维护每个项目的版本,但是当我构建整个解决方案时,似乎是ProjectB.exe没有ProjectA.exe在同一本地目录中运行。我会想并希望编译.exe二进制文件时,所有依赖项都打包在每个中,但看起来并非如此。实际上,任何在ProjectA.exe不存在时运行ProjectB.exe的尝试都会导致System.IO.FileNotFoundException。

有没有办法构建一个独立运行的ProjectB.exe版本,避免代码重复?

3 个答案:

答案 0 :(得分:1)

如果你想摆脱或依赖A,你必须将共同的逻辑提取到另一个项目中(我们称之为C),正如Adriano在评论中所建议的那样。

如果项目之间甚至需要更松散的联系,您可以不将A(或C)作为项目引用,而是作为构建的程序集(.dll文件)引用,并将Specific Version引用属性检查为{{1} }。此外,如果您的项目/代码库结构更复杂,请检查更多的程序集共享选项 here

答案 1 :(得分:1)

如果您需要通用代码,最好的解决方案是将公共类分解为第三个程序集以充当库。 (根据Adriano的建议。)他提示的另一个选项是在第二个项目中使用“添加现有文件”时使用“as link”选项。

如果您不知道它在哪里,请使用“添加现有文件”选项,然后在对话框中选择文件,“添加”按钮有一个下拉选项,您可以在其中选择“作为链接”文件“(或其他类似的东西。)

这允许您将相同的类编译到多个项目中。但请记住,无法为第二个项目更改链接文件的命名空间。如果命名空间是“ProjectA.Domain”,那么您需要在项目B中访问它。在引入多平台程序集之前,这对于Silverlight项目来说是一个有用的技巧。

答案 2 :(得分:0)

一些选项:

  1. 常用选项:将公共代码分隔为第三类库(DLL)项目。并且ProjectA和ProjectB都依赖于它。缺点是现在为了运行项目,你需要两个文件(主exe和dll。)这个方法是大多数软件的开发方式:单个可执行文件和一堆DLL。
  2. 正确的选项:将公共代码分离到第三个项目并修改项目文件以创建包含两个程序集的可执行文件(类似于非托管代码中的静态链接库。)缺点是Visual Studio不支持这个在框中,您需要修改项目文件,这些文件实际上是MS-Build定义文件才能执行此操作。
  3. 丑陋的选项:为ProjectB中的ProjectA中的公共文件创建快捷方式。这与将公共代码复制到另一个项目相同,但您仍然只剩下一个源文件。缺点是您必须为每个文件执行此操作,并在两个项目中保持相同的结构。这是一个丑陋的,如果可行的选择。选择其中一个。