如何在一个解决方案中编写Light,Pro,Ultimate三个版本

时间:2010-05-31 10:36:47

标签: c# asp.net visual-studio-2008 build

我想知道如何最好地在VS2008 Professional(包括Web部署项目)中编写三个不同版本的C#ASP.NET 3.5应用程序。 我有我的应用程序的Light,Pro和Ultimate版本(或版本)。 目前我在配置管理器中使用了三个构建版本的所有解决方案,并且我在整个代码中使用预处理器指令(在一万行代码中有大约20个这样的构造,所以它是可以监视的):

#if light
//light code
#endif
#if pro
//pro code
#endif //etc...

我已经在stackoverflow中读了好几个小时,并且想到了如何例如微软用不同的Windows版本做到这一点,但没有找到我的预期。 关于预处理器指令是否是邪恶的,在某处进行了大量讨论。

我喜欢那些#if-directives:

  • 差异的并排代码, 所以我会理解代码 六个月后的不同版本
  • 以及给予的特殊利益 编译其他版本的代码 给客户。

好的,长期解释,重复提问: 什么是最好的方式?

3 个答案:

答案 0 :(得分:7)

我很想用不同的许可证管理 runtime 期间的差异,并使用该配置启用/禁用功能。为什么?

  1. 你只需构建一个可部署的。
  2. 您可以更轻松地进行单元测试,而不是构建3个版本并对其进行测试。
  3. 用户可以升级并简单地发送新许可证。他们不必升级/重新安装。
  4. 您必须权衡您对分发客户尚未支付的解决方案的担忧(并且可以通过适当安全的许可证密钥启用)。

答案 1 :(得分:2)

我的第一个想法是将您的软件拆分为各种模块(项目/程序集),然后在您的解决方案中创建三个不同的安装项目,每个版本一个。在设置中,您只包含所需的模块。

你将失去“并排”代码,但恕我直言这只是创建复杂的方法,而不是可维护的代码。如果要为类型提供更多功能或派生类,请使用扩展方法。

答案 2 :(得分:0)

我建议正常创建基本类和功能,但允许覆盖那些特定于版本的mathod。

然后你创建一个light / pro / ultimate版本的程序集来覆盖那些方法。

然后你需要一个工厂,根据版本设置正确的覆盖类型。

在这里,您可以使用内部访问器并使代码程序集内部对编辑程序集可见