2

我有一个 Windows 应用程序 (VS2005/C#),它有两个版本,Enterprise 和 Pro。在 Pro 版本中,某些功能和菜单被禁用。目前,我通过注释掉创建企业版的禁用代码来做到这一点,然后我将每个可执行文件复制到另一个位置。显然这个过程充满了危险...... :)

我想为我的两个可执行文件有两个文件夹,Visual Studio 应该将代码以禁用专业版中的功能,并将每个文件夹放入正确的文件夹中。我有安装程序项目,可以从那里获取文件并为两个版本制作安装程序。该部分已经在工作,但我在构建安装程序之前手动将两个可执行文件复制到正确的文件夹中。所以很烂...

我想做的是这样的:

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

这可以用 Visual Studio 吗???

请注意,我的总体目标是自动化创建两个安装程序的过程。

4

7 回答 7

2

是的,那当然是可能的。默认情况下,Visual Studio 解决方案有两种配置。(发布和调试)。您可以创建其他的,如“EnterpriseDebug”和“EnterpriseRelease”只需转到(Build | Configuration Manager)下的配置管理器,然后选择 <New...>

默认情况下,配置管理器会创建一个以配置命名的文件夹,并将编译后的二进制文件放入其中。您必须手动设置条件编译符号并使用 (#if) 语句来添加/删除您的功能。

于 2008-11-12T04:43:11.990 回答
2

从 BUILD 菜单中,选择配置管理器选项

在活动解决方案配置下拉列表中选择“新建”

创建两个新的“配置”,一个用于 PRO,一个用于 ENTERPRISE

关闭配置管理器。

打开项目属性(从项目上下文菜单中)选择构建选项卡

选择 PRO 配置(从 CONFIGURATION 下拉菜单中)

在条件编译符号文本框中输入您的编译常量“PROVERSION”。

现在您所要做的就是从主工具栏上的配置下拉菜单中选择要构建的配置,然后进行构建。

当您使用 PRO 配置构建 PRO 时,散布在您的代码中的编译器编译指示 (#IF PROVERSION) 将包含限制您的功能集的代码。

如果您想在 ENTERPRISE 构建中特别包含 ENTERPRISE 功能(而不是在 PRO 构建中禁用企业功能),您还可以考虑为 ENTERPRISE 配置设置一个 ENTERPRISE 常量

于 2008-11-12T04:50:16.360 回答
1

您可以创建一个新的条件编译常量并定义 PROVERSION

于 2008-11-12T04:37:03.297 回答
0

为什么不创建一个单独的程序集来根据需要启用/禁用功能?然后只需包含特定版本的适当程序集...

于 2008-11-12T04:30:54.060 回答
0

您使用的是什么类型的许可方案。我已经做了一些应用程序,许可证密钥激活了功能集,所以你真的只有一个可执行文件。

于 2008-11-12T04:35:27.560 回答
0

我会考虑让它完全动态化,这样你就不必在编译时或构建安装程序/部署包时做任何特别的事情。以下是我在商业 winforms 应用程序中的操作方式......没有什么火箭科学,但它有效:

  1. 有一个许可方案/机制/标志,告诉您当前用户是获得 Pro 还是 Enterprise 许可。您甚至可以使用“试用”或“评估”选项。

  2. 设置一个 CurrentUser 对象(或类似对象),告诉您当前用户的许可级别。这应该可以在整个应用程序中访问。

  3. 使用插件模型,以便特性/组件/功能是应用程序中的插件。当您的应用程序的主外壳打开时,您将插件加载到应用程序中 - 使它们以您想要的方式出现在 UI 中。

  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
}

希望以上的某些组合符合您的要求。

于 2008-11-12T05:00:45.653 回答
0

me.yahoo.com 的家伙很准。

您可以使用编译时定义创建多个配置。

您还可以更改构建输出目录。默认情况下,您可能有 bin/debug 和 bin/release。没有什么可以阻止您拥有 bin/pro 和 bin/enterprise 输出文件夹(例如)。

于 2008-11-12T06:33:12.050 回答