Создание разных версий приложения в.NET

У меня есть веб-приложение, разработанное с использованием смеси веб-форм ASP.NET и MVC 5. Мне нужно создавать разные версии приложения, например, Basic, Deluxe и Premium, каждая из этих версий будет иметь различные функции. Я знаю, что директивы препроцессора - это то, что C# предлагает для условного построения и создания разных версий приложения.

В моем случае мои классы не должны включать метод, пространство имен или свойство в зависимости от встроенной версии приложения, также некоторые dll не должны включаться в зависимости от версии приложения, та же теория применяется к внешнему коду, как хорошо скажи код MVC.

Любые хорошие направления в развитии этого будут высоко ценится.

3 ответа

В зависимости от вашей функциональности и от того, что вы ее размещаете самостоятельно, вы можете просто иметь систему лицензий, которая устанавливает использование редакции.

В вашем приложении (в вашем коде ASPX и MVC) вы можете проверить по этой лицензии (с <% if ... например) знать, включать или отключать кнопку, часть формы, действие и т. д.

Вы можете хранить эти лицензии в базе данных, даже для каждого пользователя или в app.config Настройки.

Если у вас есть приложение, которое находится вне вашего контроля, вы все равно можете использовать этот метод лицензирования, но вам нужно проверить его по внешнему источнику. Есть некоторые инструменты, чтобы предоставить вам лицензирование (и, возможно, запутывание).

Вы можете использовать следующий подход:

  1. Нехорошо иметь разные API вашего приложения в разных версиях вашего продукта. Зачем? Потому что ваш пользователь может легко перейти на версии Premium или Deluxe без перекомпиляции приложения, если вы предоставите тот же API. Вам лучше использовать тот же API, но методы блокировки, доступные для пользователей Deluxe и Premium. Используйте определения в вашем коде для блокировки или разблокировки функциональности, например так:
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
Debug BASIC
Release BASIC
Debug DELUXE
Release DELUXE
Debug PREMIUM
Release PREMIUM

Это также приведет к наличию выходных папок для разных версий (вы можете настроить их в свойствах конфигурации).

  1. Измените код командной строки "Post-build event" (в Project - Properties - Build Events), чтобы удалить ненужные dll-файлы из выходной папки, например:
del PremiumDll.dll 

Будет очень трудно поддерживать 3 разные версии приложения, используя #if а также #endif разделы. Лично я бы избежал этого любой ценой и вместо этого использовал бы традиционные методы времени выполнения, чтобы контролировать различия между тремя выпусками.

Если на 100% необходимо, чтобы код доставлялся только пользователям, лицензированным для него, то вы должны поместить этот код в отдельную сборку, возможно, с использованием некоторой архитектуры плагинов.

Другие вопросы по тегам