在我的场景中,我有相同库的某个版本。
例如,假设我的库名是lib.dll,并且该库有两个版本。
在这个例子中,每个库只包含一个只有一个方法的类(称为Dummy),但每个库中方法的签名都会发生变化,具体取决于版本。
现在我需要开发一个使用以前的lib.dll的新库,但需要与每个版本兼容。
假设版本为1.0.0.0的lib.dll支持该方法:
Dummy.Method ( int )
lib.dll版本2.0.0.0改为支持该方法:
Dummy.Method ( string , int )
在我使用lib.dll开发的库中,我可以与两个lib.dll版本反向兼容,但不使用反射来调用具有不同签名的方法。 是否支持预编译器语法:
#IF lib.dll VERSION IS 1.0.0.0
Dummy.Method ( 1 ) ;
#ENDIF
#IF lib.dll VERSION IS 2.0.0.0
Dummy.Method ( "test" , 1 ) ;
#ENDIF
以便根据库的引用版本;一个代码分支,或另一个代码分支。
答案 0 :(得分:1)
Visual Studio 2019 下的 C# 确实可以实现这一点。
它们被称为生成器。
(见https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/)。
这个想法是在编译时创建你的方法。 因此,生成器将检查 lib.dll 版本并生成足够的代码来调用实际方法 - 上面的 Dummy.method()。