我有一个使用ASP.NET webforms和MVC 5混合开发的Web应用程序。我需要构建不同版本的应用程序,比如Basic,Deluxe和Premium,每个版本都有不同的功能。 我知道预处理器指令是C#为条件构建和创建应用程序的不同版本提供的东西。
在我的情况下,我的类不应该包含方法,命名空间或属性,具体取决于构建的应用程序版本,根据应用程序版本,同样的理论也不应包含一些dll适用于前端代码以及MVC代码。
任何有关发展这方面的好方向都将受到高度赞赏。
答案 0 :(得分:1)
根据您的功能以及您自己托管的功能,您可以使用许可证系统来设置要使用的版本。
在您的应用程序中(在您的ASPX和MVC代码中),您可以检查此许可证(例如,使用<% if ...
)以了解是启用还是禁用按钮,表单的一部分,操作,等
您可以将此许可证存储在数据库中,即使是基于每个用户,也可以存储在app.config
设置中。
如果您的应用程序无法控制,您仍然可以使用此许可方法,但您需要针对外部源进行检查。有一些工具可以为您提供许可(以及可选的混淆)。
答案 1 :(得分:1)
您可以使用以下方法:
public bool SomeMethod()
{
#ifdef BASIC
raise new Exception("this method is available in Deluxe version only!");
#endif
#ifdef DELUXE || PREMIUM
; // do some work available for deluxe versions only
#endif
}
Debug
Release
Debug BASIC
Release BASIC
Debug DELUXE
Release DELUXE
Debug PREMIUM
Release PREMIUM
这也会导致具有不同版本的输出文件夹(您可以在配置的属性中调整它们)。
del PremiumDll.dll
答案 2 :(得分:0)
使用#if
和#endif
部分维护3个不同版本的应用程序非常困难。就个人而言,我会不惜一切代价避免这种情况,而是使用传统的运行时方法来控制3个版本之间的差异。
如果100%必须将代码发送给获得许可的用户,则应将该代码放在单独的程序集中,可能使用某种插件架构。