C#基于所使用的dll版本编译函数。

时间:2018-04-06 08:27:37

标签: c# visual-studio

我有很多较小的项目,每个项目都依赖于各种外部dll。 供应商错误修复了这些dll,导致我的程序范围有所变化,因为修复并不总是适用于其他程序。虽然我知道一些方法来解决这个问题。 ea将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 个答案:

答案 0 :(得分:2)

不,基本上。您必须查询在运行时发现的库版本(通过API,或通过检查文件元数据),并在方法内执行类似switch的操作。通常你只需要做一次;您可以通过静态字段和“延迟”加载来执行此操作,或者您可以将版本查询放入静态初始化程序。

答案 1 :(得分: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

包含它的文件可以在项目中链接,因此它可以从编译器指令中受益。