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

Visual Studio中单个C#项目中的多个可执行文件,c#,visual-studio-2010,C#,Visual Studio 2010,我目前有一个单一的解决方案和一个项目,这将生成可执行文件a.EXE。该项目由几十个C#源文件、表单等组成 我现在还需要生成可执行文件B.EXE和C.EXE。B.EXE将使用A.EXE大约95%的代码库(即功能的子集)。C.EXE将使用大约80%的B.EXE代码库(即另一个子集) 建议使用什么方法来设置Visual Studio和我的项目/解决方案?我使用的是2010,但我认为这可能是一个普通的VisualStudio问题 我关注的是: 使用预处理器,似乎无法更改输出可执行文件的名称。另外,排除

我目前有一个单一的解决方案和一个项目,这将生成可执行文件a.EXE。该项目由几十个C#源文件、表单等组成

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

建议使用什么方法来设置Visual Studio和我的项目/解决方案?我使用的是2010,但我认为这可能是一个普通的VisualStudio问题

我关注的是:

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

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

  • 我担心将我的项目划分为多个程序集会使管理、调试和记住在何处定义的内容变得困难。我担心我最终会遇到十几个混乱的程序集,而不是一把

感谢您的想法和建议。我相信这是一个常见的问题


谢谢,Andy

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

类库应该包含3个应用程序之间不会更改的代码,或者在发生微小更改的情况下,您应该充分抽象代码以支持它们之间的差异。复制粘贴是一个糟糕的想法,但如果必须,请使用,尽管更好的代码是一次性的


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

如果a、B和C可执行文件之间存在共享代码,您的支持代码应安排为向所有三个组件提供功能的程序集


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

一致认为我应该使用库。我已经开始将代码库拆分成它们,并且已经遇到了循环依赖关系。我猜解决方案是重构这两个库,用公共代码创建第三个库。现在我觉得我有点像是在跟踪一只兔子…当你遇到循环依赖问题时,通常是因为你的类型耦合太紧密了。有许多技术可以将类型与其使用分离—例如,通过从类型中提取接口,并仅在类库中使用接口—您的其他项目可以从接口派生自己的类型,并在遇到接口时简单地告诉类库使用此特定类型(依赖项注入)。如果您愿意发布一些代码示例(显示问题的最低限度),我将介绍一些可以帮助您的技术。谢谢。由于这有点离题,我在这里发布了一个新问题: