【问题标题】:Can you include only certain forms during a compile你可以在编译过程中只包含某些表格吗
【发布时间】:2010-10-25 08:15:42
【问题描述】:

我们正在开发一个应用程序的两个版本。不是应用程序的精简版和标准版的意义上,其中一个版本将具有有限的功能等。我们实际上将在应用程序中显示不同类型的信息,具体取决于版本(这是我描述它的最佳方式涉及太多细节)。

为了区分我们考虑使用条件属性和#if 指令的应用程序的两个版本(如果有任何其他选项或比这两个更好的方法,我愿意提供建议)。经过一些研究和辩论,我们决定使用#if 方法,因为这不会在编译过程中包含不必要的代码(而条件属性只会删除对不满足条件的方法的调用,但仍然包括方法......如果我没记错的话)。我意识到这两者并不相互排斥,所以如果需要,我们可以随时混合搭配。

无论如何...我们现在想知道的是,是否有一种方法可以在编译期间包含某些 Windows 窗体,具体取决于我们正在编译的应用程序的版本。我们已经拆分了所有的逻辑,所以表单实际上只是表单,其中只有很少的代码(主要是调用处理所有业务逻辑的表单管理器类)。表单管理器类将包含其中的一些#if 语句,因此代码可以在应用程序的两个版本中重用,只要可能(而不是创建两个类并在类上放置条件属性......虽然也许这是我们应该考虑的)。

有人知道这样做的好方法吗?

TIA

更新:

只是我们实际决定要做的事情的仅供参考。我们将不同版本的表单放入单独的命名空间中,然后只需在管理所有表单的类顶部的命名空间 using 语句周围使用 #if 语句。工作很顺利,工作量很小。

【问题讨论】:

  • 为什么不简单地将整个 Form 类放在条件 if 中?
  • 我们是否必须为每个部分类文件(例如由设计者使用所有 Windows 组件代码创建的文件等)执行此操作?

标签: c# .net conditional-compilation


【解决方案1】:

我用图书馆项目来做这件事。我制作了另一个项目 (.csproj),然后将现有源包含到该项目中。在 VS2008 中,右键单击新项目,单击添加现有项...,然后而不是单击添加,使用选择箭头选择“添加为链接”。

添加为链接不会复制源模块,而是将对现有源的引用包含到新项目中。这样您就可以拥有 N 个项目,每个项目都有不同的源模块组合。我将它与通用模块源中的#if 语句一起使用,以生成不同版本的库。

Add Existing Item http://www.freeimagehosting.net/uploads/th.eff09391e9.png full image

Add as Link http://www.freeimagehosting.net/uploads/th.f12b764887.png full image

【讨论】:

    【解决方案2】:

    另一种方法是使用 OO 继承:将两个版本共有的功能放入超类中,然后创建单独的子类,为每个版本定义超类的特化。

    然后您可以将您的超类[es] 构建为共享库,并在单独的程序集中构建每个专用子类(它们引用公共共享库)。

    这样做不使用条件编译或条件构建选项。

    【讨论】:

    • 我们可能不得不走这条路......直到我们进入编码过程之前,我们才真正意识到我们将拥有两个版本的应用程序。我希望有一种更简单的方法,尽管这可能并不难,因为我们以模块化的方式设计了我们的逻辑。
    • 这适用于除了表单之间的可视化设计器中的 UI 更改之外的所有内容。
    【解决方案3】:

    ChrisW 建议的解决方案可能是正确的方法。但是,它可能会对您的设计进行很多更改,所以这里有另一个:不要为同一个项目创建多个配置,而是创建另一个具有相同源的项目。为此,最简单的方法是创建 .csproj 文件的副本并将其包含在解决方案中

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 2013-09-20
      • 2018-03-13
      • 2017-07-22
      • 2020-10-08
      • 2013-08-10
      相关资源
      最近更新 更多