在.NET中构建不同版本的应用程序

时间:2015-02-24 10:52:43

标签: c# .net preprocessor-directive

我有一个使用ASP.NET webforms和MVC 5混合开发的Web应用程序。我需要构建不同版本的应用程序,比如Basic,Deluxe和Premium,每个版本都有不同的功能。 我知道预处理器指令是C#为条件构建和创建应用程序的不同版本提供的东西。

在我的情况下,我的类不应该包含方法,命名空间或属性,具体取决于构建的应用程序版本,根据应用程序版本,同样的理论也不应包含一些dll适用于前端代码以及MVC代码。

任何有关发展这方面的好方向都将受到高度赞赏。

3 个答案:

答案 0 :(得分:1)

根据您的功能以及您自己托管的功能,您可以使用许可证系统来设置要使用的版本。

在您的应用程序中(在您的ASPX和MVC代码中),您可以检查此许可证(例如,使用<% if ...)以了解是启用还是禁用按钮,表单的一部分,操作,等

您可以将此许可证存储在数据库中,即使是基于每个用户,也可以存储在app.config设置中。

如果您的应用程序无法控制,您仍然可以使用此许可方法,但您需要针对外部源进行检查。有一些工具可以为您提供许可(以及可选的混淆)。

答案 1 :(得分:1)

您可以使用以下方法:

  1. 在不同版本的产品中使用不同的应用程序API并不好。为什么?因为如果您提供相同的API,您的用户可以轻松升级到Premium或Deluxe版本而无需重新编译应用程序。您应该更好地使用相同的API,但锁定方法可用于Deluxe和Premium用户。使用代码中的定义来锁定或解锁功能,如下所示:
  2. 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
    }
    
    1. 为每个版本的应用程序创建2个配置,一个基于“Debug”,另一个基于产品的“Release”配置,因此您可以在Release和Debug模式下测试不同的版本。所以你可能会有这样的事情:
    2. Debug
      Release
      Debug BASIC
      Release BASIC
      Debug DELUXE
      Release DELUXE
      Debug PREMIUM
      Release PREMIUM
      

      这也会导致具有不同版本的输出文件夹(您可以在配置的属性中调整它们)。

      1. 修改“构建后事件”命令行代码(在项目 - 属性 - 构建事件中)以从输出文件夹中删除不必要的dll文件,如下所示:
      2. del PremiumDll.dll 
        

答案 2 :(得分:0)

使用#if#endif部分维护3个不同版本的应用程序非常困难。就个人而言,我会不惜一切代价避免这种情况,而是使用传统的运行时方法来控制3个版本之间的差异。

如果100%必须将代码发送给获得许可的用户,则应将该代码放在单独的程序集中,可能使用某种插件架构。