等效于外部程序集的预处理器定义-更改intellisense或根据设置给出编译时错误
本文关键字:intellisense 设置 编译时错误 更改 程序集 于外部 预处理 定义 处理器 | 更新日期: 2023-09-27 18:21:30
我有一个使用库连接的数据库。有些表格已经好几年没变了,比如ErrorLog
表格。其他的,如Inventory
,偶尔会有轻微的变化。在我的时代之前,这种情况已经持续了很多年。这样做的结果是,根据您使用的数据库的确切版本,我们现在有了堆积如山的程序集。这造成了客户X在4.3.0.7版本上的维护噩梦,我们希望他们使用该实用程序,但该实用程序适用于4.4.1.3版本,尽管该实用程序使用的三个表根本没有改变。
我一直在尝试编写一个新的、有望改进的库来使用数据库,但由于不同数据库版本上的所有不同客户,该库实际上只与最新版本兼容,这一事实阻碍了我的工作。尽管通常情况下,我想做的90%都存在于新库中,并且只需要几十行代码就可以合并到缺失/不推荐使用的功能中。我希望能够将其中的许多内容合并为更易于管理的内容。如果都在同一个项目中,我可以做一些类似的事情。。
#if Version4301
#define ErrorLog
#endif
#if Version4413
#define ErrorLog
#endif
#if ErrorLog
//ErrorLog class is defined in here
#endif
#if Version4413
//Definition for Inventory.Explode() is in here
#endif
然后在呼叫者
#define Version4301
ErrorLog.Log();
Inventory.Explode(); //This should be me a compiler error
但据我所知,由于#define
是一个预处理器指令,我不能在任何已经编译的外部程序集上使用它。
以下是我正在努力实现的目标:
- 我希望有一个程序集用于此数据库访问,并且希望它与许多不同版本的数据库
- 我希望程序集的用户设置一些内容,无论是config/setting/#define/etc,让他们可以轻松地指定版本目标数据库的
- 如果他们试图使用在他们瞄准的版本,我不希望它出现在智能意义上,或者至少我想要一个编译器错误。不想等到运行时
C#中有没有一种方法可以让我做我想做的事情?
等效于外部程序集的预处理器定义-更改intellisense或根据设置给出编译时错误
据我所知,你想要的东西不能用C#实现。
C#语言规范包括以下"条件"功能:
- 条件编译符号
- 条件编译指令
- 条件方法
如果创建单个程序集比编译器错误更重要:请定义应用程序设置。让每个特定于版本的方法检查应用程序设置的值,并在适当的情况下抛出异常。
如果编译器错误比创建单个程序集更重要:请使用条件编译符号和指令来包含特定于版本的功能。为每个版本特定的编译符号创建一个脚本来编译代码一次。为每个用户提供适当的特定于版本的程序集。