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

C# 相当于外部程序集的预处理器定义-根据设置更改intellisense或给出编译时错误,c#,C#,我有一个使用库连接的数据库。有些表多年来没有改变,比如ErrorLog表。其他的,比如库存,偶尔会有轻微的变化。这在我的时代之前已经持续了很多年。这样做的结果是,我们现在有了一小堆程序集,这取决于您使用的数据库的确切版本。这造成了客户X在版本4.3.0.7上的维护噩梦,我们希望他们使用该实用程序,但该实用程序适用于版本4.4.1.3,即使该实用程序使用的三个表根本没有更改 我一直在尝试编写一个新的、希望得到改进的库来使用数据库,但由于不同数据库版本上的所有不同客户,该库实际上只与最新版本兼容,这

我有一个使用库连接的数据库。有些表多年来没有改变,比如ErrorLog表。其他的,比如库存,偶尔会有轻微的变化。这在我的时代之前已经持续了很多年。这样做的结果是,我们现在有了一小堆程序集,这取决于您使用的数据库的确切版本。这造成了客户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,让他们轻松指定版本 他们要针对的数据库的 如果他们试图使用的属性/字段/类/方法功能/表/列在 他们瞄准的版本,我不希望它出现在intellisense中, 或者至少我想要一个编译器错误。不想等到运行时 C语言中有没有一种方法可以让我做我想做的事情

就我所知,你想要的东西不能用C来完成

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

条件编译符号 条件编译指令 条件方法 如果创建单个程序集比编译器错误更重要,请定义应用程序设置。让每个特定于版本的方法检查应用程序设置的值,并在适当时引发异常


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

很难说。我真的很想摆脱多重装配,因为正如我所说的,我们有一座小山,要维护它们很痛苦。我想要的编译器警告是因为我不希望程序员使用他们正在使用的版本不可用的功能,但是他们在编译之后才会发现这些功能如果您从使用条件编译指令的同一源代码编译所有程序集,并在生成服务器上编写编译脚本,与单个程序集相比,不需要代表开发人员进行额外的工作就可以创建一大堆程序集。