Конфигурации и функции программы в приложении Visual Studio / C # для Windows - PullRequest
2 голосов
/ 12 ноября 2008

У меня есть приложение для Windows (VS2005 / C #), которое поставляется в двух версиях, Enterprise и Pro. В версии Pro некоторые функции и меню отключены. В настоящее время я делаю это, комментируя код отключения для создания версии Enterprise, а затем копирую каждый исполняемый файл в другое место. Очевидно, этот процесс чреват опасностью ...:)

Я хотел бы иметь две папки для моих двух исполняемых файлов, и Visual Studio должна поместить код для отключения функций в профессиональной версии и поместить каждую в правильные папки. У меня есть проекты инсталляторов, которые будут брать файлы оттуда и делать инсталляторы для двух версий. Эта часть уже работает, но я вручную копирую два исполняемых файла в нужные папки перед сборкой установщиков. Так это отстой ...

Я хотел бы сделать что-то вроде этого:

#ifdef PROVERSION
part1.disable();
part2.disable();
#endif

Возможно ли это с Visual studio ???

Обратите внимание, моя общая цель - автоматизировать процесс создания двух установщиков.

Ответы [ 7 ]

2 голосов
/ 12 ноября 2008

в меню BUILD, выберите опцию диспетчера конфигурации

в раскрывающемся списке конфигурации активного решения выберите "новый"

создать две новые «конфигурации», одну для PRO и одну для ENTERPRISE

закрыть менеджер конфигурации.

открыть свойства проекта (из контекстного меню проекта) выберите вкладку сборки

выберите конфигурацию PRO (из раскрывающегося списка КОНФИГУРАЦИЯ)

введите вашу константу компиляции "PROVERSION" в текстовое поле условных символов компиляции.

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

при создании PRO с использованием конфигурации PRO прагмы компилятора (#IF PROVERSION), разбросанные по всему коду, будут включать код, ограничивающий ваш набор функций.

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

2 голосов
/ 12 ноября 2008

Да, это, конечно, возможно. Визуальное студийное решение поставляется с двумя конфигурациями по умолчанию. (Выпуск и отладка). Вы можете создать дополнительные, такие как «EnterpriseDebug» и «EnterpriseRelease». Просто перейдите в Configuration Manager в разделе (Build | Configuration Manager) и выберите

Менеджер конфигурации по умолчанию создаст папку с именем конфигурации и поместит в нее скомпилированные двоичные файлы. Вам нужно будет вручную установить условные символы компиляции и использовать оператор (#if) для добавления / удаления ваших функций.

1 голос
/ 12 ноября 2008

вы можете создать новую Условную константу компиляции и определить PROVERSION

0 голосов
/ 12 ноября 2008

me.yahoo.com парень на месте.

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

Вы также можете изменить выходной каталог сборки. По умолчанию у вас, вероятно, есть bin / debug и bin / release. Ничто не мешает вам иметь папки вывода bin / pro и bin / enterprise (например).

0 голосов
/ 12 ноября 2008

Я хотел бы сделать его полностью динамичным, чтобы вам не нужно было делать ничего особенного во время компиляции или при сборке пакета установки / развертывания. Вот как я это сделаю в коммерческом приложении winforms ... ничего страшного в этом нет, но это работает:

  1. Иметь схему / механизм / флаг лицензирования, которая сообщает вам, лицензирован ли текущий пользователь для Pro или Enterprise. Вы также можете использовать опцию "Trial" или "Eval".

  2. Установите объект CurrentUser (или аналогичный), который сообщает вам уровень лицензии текущего пользователя. Это должно быть доступно во всем приложении.

  3. Используйте модель плагина , чтобы функции / компоненты / возможности были плагинами в приложении. Когда открывается основная оболочка вашего приложения, вы загружаете плагины в приложение, заставляя их отображаться в пользовательском интерфейсе так, как вам нужно.

  4. Изучите создание пользовательских атрибутов , которые украшают классы, представляющие ваши плагины. Атрибут должен указывать минимальную лицензию, необходимую для этого плагина / функции. Когда загрузчик плагинов встречает новый плагин, проверьте атрибут этого плагина, чтобы увидеть, какая лицензия уровня требуется. Если текущий пользователь встречает (или превышает) эту лицензию, то вы загружаете ее. Если нет, то нет.

  5. Если вы не можете разделить свои функции / опции / инструменты на вещи, которые могут быть легко модульными в виде плагинов, вы все равно можете использовать этот уровень лицензии CurrentUser для проверки. Например, предположим, что в версии Pro (но не для предприятия) существует ограничение в 100 «виджетов»:

Например:

enum LicenseLevel {
  Eval = 0,
  Pro = 1,
  Enterprise = 2
}

// later...    

for(i=0; i < widgets.Count; i++) {
  if (i == 100 && CurrentUser.LicenseLevel < LicenseLevel.Enterprise)
    break;
  // do stuff
}

Надеюсь, некоторая комбинация вышеперечисленного соответствует тому, что вы ищете.

0 голосов
/ 12 ноября 2008

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

0 голосов
/ 12 ноября 2008

Почему бы не создать отдельную сборку, которая включает / отключает функции по мере необходимости? Затем просто включите соответствующую сборку для конкретной версии ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...