Visual Studio中单个C#项目的多个可执行文件

时间:2010-09-10 18:12:40

标签: c# visual-studio-2010

我目前只有一个项目的单一解决方案,这会生成可执行的A.EXE。该项目由数十个C#源文件,表单等组成。

我现在需要生成可执行文件B.EXE和C.EXE。 B.EXE将使用A.EXE的约95%的代码库(即功能的子集)。 C.EXE将使用大约80%的B.EXE代码库(即另一个子集)。

为此设置Visual Studio和我的项目/解决方案的推荐方法是什么?我正在使用2010,但我认为这可能是一个通用的Visual Studio问题。

我的担忧:

  • 使用预处理器似乎没有办法更改输出可执行文件的名称。也可能无法排除整个文件,我必须离开类接口并定义代码?

  • 为B.EXE和C.EXE创建项目并链接源文件我担心这三个项目变得不同步太容易了。假设我将一个新文件foo.cs添加到一个项目中,我可能需要记住将其添加到其他项目中,并记住使用链接,以便不复制文件。

  • 我担心将我的项目分成多个组合将使管理,调试和记住在哪里定义的内容变得困难。我担心我最终会得到十几个令人困惑的集会,而不仅仅是一小撮。

感谢您的意见和建议。我确信这是一个常见的问题。

谢谢,安迪

2 个答案:

答案 0 :(得分:5)

您使用类库来包含每个应用程序之间通用的代码。在每个应用程序中,您添加对该类库的引用,并且您可以使用其中的所有可公开访问的代码。 (您将无法使用内部类型,如果您不添加公共内容,则默认为内部类型。)

类库应包含在3个应用程序之间不会更改的代码,或者如果发生轻微更改,您应该抽象代码足以支持它们之间的差异。复制粘贴是一个可怕的想法,但如果必须,请使用rule of 3 - 尽管更好的代码只有一次。

将代码拆分为多个程序集并不会使管理变得困难 - 我发现它恰恰相反。您可以将每个类库视为同一项目的单独文件夹,而您只是从每个文件夹中获取代码。但不同的是,您不能在程序集之间意外引入循环依赖关系,这有助于您以足够抽象的方式设计代码以支持所有3个项目,而不依赖于任何特定代码中的代码。

答案 1 :(得分:2)

如果A,B和C可执行文件之间存在共享代码,则支持代码应该作为程序集排列,为所有这三个程序提供功能。

请记住,没有理由不生成单个程序集来支持所有三个可执行文件。使用名称空间和OO原则(如继承)在类的关注点和角色之间划清界限。根据需要,所有三个可执行文件都可以使用共享程序集的一部分。