繁体   English   中英

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

[英]Conditional file compilation in Visual Studio and .NET

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM