gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:08:10 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

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

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

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

关于c# - Visual Studio 和 .NET 中的条件文件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19246598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com