5

我正在为我的公司开发一个软件工具。我正在使用 Visual Studio、C# 并以 .NET 4.0 为目标。要求之一是软件将发布三个版本(受限、标准和扩展)。我公司有几个实习生/实习生,还有一些正式员工和经理。并且每组将获得其他版本的软件。实习生限量版,员工标准版和经理扩展版。这些是给我的要求。此外,每个版本必须是一个可执行文件(无 dll 文件)。

因此,我创建了一个项目,其中包含一组将有条件地编译和构建的文件。在主程序中,我可以使用指令 #if 和/或 [Conditional] 属性根据当前配置仅实例化所需的类。

但是无论如何编译和构建当前不需要的文件。并且创建的可执行文件包含这些文件中的所有代码,这些代码是不受欢迎的并且不符合给我的要求。每个可执行文件应仅包含目标员工组所需的代码。(这是出于安全原因。)

所以我的问题是如何根据当前配置从编译过程中排除一组文件?

4

1 回答 1

6

您试图实现的是开发软件产品线(1)。在这个领域有很多研究正在进行。目前的解决方案非常有限,其中大部分已经在评论中提到:

  • 使用 #if 编译器指令忽略不需要的文件 (CodeNaked)
  • 管理多个解决方案文件 (Weyland Yutani)
  • 使用功能 ide ( 2 ) 或其他一些工具/帮助程序进行功能定位 ( 3 ) 并将这些高级版本开发为功能(这将需要一些额外的时间才能进入)
  • 当然你可以使用以上的组合

您还可以完全独立地开发这 3 个应用程序,这不是您想要的。但也请注意,您可以提取库中的通用功能,然后使用 ILMerge( 4 ) 来返回每个版本的单个 .exe 文件。

我认为这些是您的选择,您应该根据自己的情况选择最佳组合。如果您的三个应用程序非常相似并且共享许多功能,我会选择“#if”或多个解决方案文件(因为您仅限于 3 个版本)。如果版本差异很大,那么 ILMerge 和提取通用功能可能是更好的方法。我不知道特征导向是否已经准备好生产,所以为了完整起见我提到了它们。

并且不要忘记 CodeNaked 的评论:您的安全性真的不应该依赖于用户可用的代码......

于 2013-10-08T13:03:45.430 回答