Visual Studio和.NET中的条件文件编译

Vic*_*tor 5 .net c# visual-studio software-product-lines

我正在为我的公司开发一个软件工具.我正在使用Visual Studio,C#并以.NET 4.0为目标.其中一个要求是软件将以三个版本(有限,标准和扩展)发布.我公司有几名实习生/实习生以及一些正式员工和经理.每个小组都将获得该软件的其他版本.实习生的限制版本,员工的标准版本和管理人员的扩展版本.Theese是给我的要求.而且,每个版本必须是一个可执行文件(没有dll文件).

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

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

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

mat*_*hid 6

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

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

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

我认为这些是您的选择,您应该根据自己的情况选择最佳组合.如果您的三个应用程序非常相似并且共享许多功能,我会选择"#if"或多个解决方案文件(因为您仅限于3个版本).如果版本差异很大,那么ILMerge和提取常用功能是一种更好的方法.我不知道功能定位是否已准备就绪,所以我提到它们是为了完整性.

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