等效于外部程序集的预处理器定义-更改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或根据设置给出编译时错误

等效于外部程序集的预处理器定义-更改intellisense或根据设置给出编译时错误

据我所知,你想要的东西不能用C#实现。

C#语言规范包括以下"条件"功能:

  • 条件编译符号
  • 条件编译指令
  • 条件方法

如果创建单个程序集比编译器错误更重要:请定义应用程序设置。让每个特定于版本的方法检查应用程序设置的值,并在适当的情况下抛出异常。

如果编译器错误比创建单个程序集更重要:请使用条件编译符号和指令来包含特定于版本的功能。为每个版本特定的编译符号创建一个脚本来编译代码一次。为每个用户提供适当的特定于版本的程序集。