我想知道如何最好地在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:
好的,长期解释,重复提问: 什么是最好的方式?
答案 0 :(得分:7)
我很想用不同的许可证管理 runtime 期间的差异,并使用该配置启用/禁用功能。为什么?
您必须权衡您对分发客户尚未支付的解决方案的担忧(并且可以通过适当安全的许可证密钥启用)。
答案 1 :(得分:2)
我的第一个想法是将您的软件拆分为各种模块(项目/程序集),然后在您的解决方案中创建三个不同的安装项目,每个版本一个。在设置中,您只包含所需的模块。
你将失去“并排”代码,但恕我直言这只是创建复杂的方法,而不是可维护的代码。如果要为类型提供更多功能或派生类,请使用扩展方法。
答案 2 :(得分:0)
我建议正常创建基本类和功能,但允许覆盖那些特定于版本的mathod。
然后你创建一个light / pro / ultimate版本的程序集来覆盖那些方法。
然后你需要一个工厂,根据版本设置正确的覆盖类型。
在这里,您可以使用内部访问器并使代码程序集内部对编辑程序集可见