根据使用的DLL版本编译C#函数。

6
我有许多小项目,每个项目都依赖于各种外部dll。 供应商修复这些dll,导致我的一系列程序也需要更新,或者不需要更新,因为修复并不总是适用于其他程序。虽然我知道一些应对方法,比如将dll保存在lib文件夹中或使用Nuget。但即使这样,维护通用包装代码仍然可能很麻烦。
所以我想知道,在Visual Studio中是否有一些方法可以编写这样的包装器:
[Rongten.dll = 1.5+]   // 1.5 and above versions
Public string[] ExtendedInfo()
{ return this.api.ExtendedInfo }

[Rongten.dll = 1.2]  //only a specific version
Public string[] ExtendedInfo()
{String[] t = new string[1];
 t = "not available";
  return t;
}
 [Rongten.dll = 1.1-]  //below a specific version
Public string  ExtendedInfo()
{ 
 t = "not available";
  return t;
}

一些方括号方法[允许使用DLL版本],可能需要通过插件之类的东西来实现。
2个回答

2
不用,基本上不需要。你需要在方法内查询运行时所发现的库版本(通过API或检查文件元数据),然后在方法内进行类似于switch的操作。通常情况下,你只需要执行一次这样的操作。你可以通过一个静态字段和“延迟”加载来实现,或者将版本查询放入静态初始化程序中。

1

不能通过魔法实现此操作,但是可以使用预处理指令轻松解决。您需要做的唯一事情就是在项目设置中配置正确的版本:

#if RONGTENVERSION_1_5_PLUS
public string[] ExtendedInfo()
{
    return this.api.ExtendedInfo;
}
#elif RONGTENVERSION_1_2
public string[] ExtendedInfo()
{
    return new string[] { "not available" };
}
#elif RONGTENVERSION_1_1_MIN
public string ExtendedInfo()
{ 
    return "not available";
}
#endif

这个文件可以在你的项目中链接,因此可以从编译器指令中受益。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接