C# 在应用程序之间共享类

C# 在应用程序之间共享类,c#,C#,我正在开发一个VisualStudio解决方案,该解决方案目前有两个项目(后面还有更多项目)。其中一个项目是我去年构建的一个成熟的C#/Winforms应用程序(将其视为原型)。另一个是DLL,它将通过不同的应用程序执行与原型相同的操作。我想在DLL中重用原型中的代码(让我们调用有问题的SyncInvoices()方法),因为原型代码工作得非常好b/c我已经解决了其中的错误。包含SyncInvoices的类被烘焙到原型应用程序中,而不是它自己的DLL 我已经将包含SyncInvoices()的类

我正在开发一个VisualStudio解决方案,该解决方案目前有两个项目(后面还有更多项目)。其中一个项目是我去年构建的一个成熟的C#/Winforms应用程序(将其视为原型)。另一个是DLL,它将通过不同的应用程序执行与原型相同的操作。我想在DLL中重用原型中的代码(让我们调用有问题的SyncInvoices()方法),因为原型代码工作得非常好b/c我已经解决了其中的错误。包含SyncInvoices的类被烘焙到原型应用程序中,而不是它自己的DLL

我已经将包含SyncInvoices()的类添加到DLL的项目中(作为链接文件,因为它已经存在于解决方案的其他位置)。我可以在DLL项目中实例化该类并调用SyncInvoices(),但编译器会抛出与GUI元素相关的错误

问题是SyncInvoices()中有一些对原型应用程序GUI的线程安全调用,基本上用于将消息/错误传递回接口

DLL没有GUI,因此不需要运行该代码。它仍然构建该类中的其余方法,即使它们没有被使用。有没有办法让编译器在构建DLL时忽略这些行?我不希望维护两组几乎相同的代码,尤其是当两个项目是同一解决方案的一部分时

我曾考虑过使用#define/#if块来分割代码,但我不确定C#是否能以这种方式工作——我看到的大多数情况下,使用这些块是为了防止调试代码最终进入生产环境。如果可以告诉应用程序通过#If块包含/排除代码,我如何设置值


我是否应该咬紧牙关,复制一个没有令人不快的代码的方法?

如果没有更多细节,很难给出正确的答案,但我想说的是,通常情况下,你会用事件来处理这个问题。无论原型中发生了什么对GUI的调用,这通常都是某种形式的事件,当您实例化新类时,您将在原型中订阅这些事件


您是否有任何特别有问题的案例可以提供更多详细信息?

Ya…我想您会将代码注释掉吗?一些代码可能会有所帮助……您需要做的是将公共代码分离到它自己的项目/dll(不含gui内容)中,然后将其引用到需要该功能的两个项目中。在我看来,您似乎违反了关注点分离,现在它正在咬您。现在进行分离。在另一个单独的DLL中引用包含共享功能的DLL吗?该应用程序之所以以现在的方式构建,是因为当时没有重新实现代码的计划。所有这些都是在原型投入使用一段时间后出现的。原型最大的缺陷是它不是设计为自动化的,所以这个DLL将在我们的内部调度应用程序中运行。基本上,GUI调用是相当小的。有一种方法在作业期间禁用/启用某些小部件,而另一种方法将输出写入我用作输出区域的列表框,而另一种方法将输出写入系统日志。DLL项目可以静默运行(无输出),除非遇到问题并需要将输出发送回其父应用程序。我想所有这些都可以通过事件处理。听起来像是禁用/启用/更新的理想用例。在输出上,事件确实可以工作,但您可能需要考虑一些类似于它是否是主输出或逻辑操作(而不是偶尔发生的事件等)。祝你好运!