1

我看到了一些关于此的帖子,但没有一个对我有用。我有一个使用第三方 dll 的项目。有几个版本的 dll 但我只使用2.ThirdParty8.dllThirdParty9.dll

该项目将使用两个版本的 dll 之一部署在不同的客户端上。由于许可问题,我无法在每个人身上安装最新版本。但是代码是为版本 8 创建的,除了 using 语句外,不会对 ThirdParty9.dll 进行任何更改。一个将是

using ThirdParty8;

和另一个

using ThirdParty9;

类具有相同的名称。

有什么方法可以选择在条件下使用的那个吗?例子

if (configfile.version = 8)
    using ThirdParty8;
else
    using ThirdParty9;

谢谢

詹弗兰科

4

4 回答 4

1

我想你的意思是

#if VERSION8
using ThirdParty8
#else
using ThirdParty9
#endif

如果它是正确的,也许你可以定义一个像 VERSION8 这样的条件,并在有或没有它的情况下进行编译。

于 2013-09-04T10:53:40.923 回答
0

您可以通过使用 C# 指令做一些事情来捏造这个

#if DEF_USE_TP8
using ThirdParty8;
#endif

这是该问题的 C 风格解决方案,然后从相同的源代码编译两个单独的 DLL,每个 DLL 都使用适当的编译器指令进行编译,但这不是 C# 风格的解决方案。

我的偏好是回到库提供者那里,并质疑为什么在底层对象接口没有改变的情况下他们的命名空间发生了变化,并解释说这实际上破坏了他们所有的客户代码。

这个问题的答案可能会帮助你理解为什么以及你现在和未来需要做什么来处理这个问题。(即是否存在界面差异?他们是否也会在下一个版本中这样做?等等......)

于 2013-09-04T11:13:11.930 回答
0

您可以使用命名空间中的类来做到这一点。例如:

if (configfile.version == 8)
   doSomething8(ThirdParty8.Car);
else
   doSomething9(ThirdParty9.Car);

void doSomething8(ThirdParty8.Car car)
{
   //do you get it?
}
于 2013-09-04T10:49:05.563 回答
0

如果您的意思是“类具有相同的名称”,请尝试以下操作:

  string strName = this.GetType().Name;

  if (strName == ThirdParty8.ClassName)
  { ...
于 2013-09-04T10:50:15.753 回答