0

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

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

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

4

3 回答 3

1

如果您想摆脱对 A 的依赖或依赖,您将不得不将通用逻辑提取到另一个项目(我们称之为 C)中,正如 Adriano 在评论中建议的那样。

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

于 2012-11-28T22:16:54.480 回答
1

如果您需要通用代码,最好的解决方案是将通用类分解为第三个程序集以用作库。(根据阿德里亚诺的建议。)他暗示的另一个选项是在将“添加现有文件”用于第二个项目时使用“作为链接”选项。

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

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

于 2012-11-28T22:18:08.760 回答
0

一些选项:

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