3

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

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

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

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

TIA

更新:

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

4

3 回答 3

3

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

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

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

于 2009-05-11T17:12:19.197 回答
3

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

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

添加现有项目 http://www.freeimagehosting.net/uploads/th.eff09391e9.png 完整图片

添加为链接 http://www.freeimagehosting.net/uploads/th.f12b764887.png 完整图片

于 2009-05-11T19:54:52.460 回答
1

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

于 2009-05-11T17:19:32.913 回答