Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C.使用装配的条件_C#_Assembly_Conditional Statements - Fatal编程技术网

C# C.使用装配的条件

C# C.使用装配的条件,c#,assembly,conditional-statements,C#,Assembly,Conditional Statements,我看到了一些关于这个的帖子,但没有一个是为我工作的。 我有一个使用第三方dll的项目。有几个版本的dll,但我只使用2。第三方8.dll和第三方9.dll 此项目将使用dll的两个版本之一部署在不同的客户端上。 由于许可问题,我无法在每个人身上安装最新版本。但是该代码是为版本8创建的,除了using语句外,不会对ThirdParty9.dll进行任何更改。 一个是 using ThirdParty8; 另一个呢 using ThirdParty9; 类具有相同的名称 有没有办法选择要在某个条

我看到了一些关于这个的帖子,但没有一个是为我工作的。 我有一个使用第三方dll的项目。有几个版本的dll,但我只使用2。第三方8.dll和第三方9.dll

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

using ThirdParty8;
另一个呢

using ThirdParty9;
类具有相同的名称

有没有办法选择要在某个条件下使用的选项?范例

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


Gianfranco

您可以通过名称空间中的类来实现。例如:

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

void doSomething8(ThirdParty8.Car car)
{
   //do you get it?
}

您可以使用名称空间中的类来实现这一点。例如:

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

void doSomething8(ThirdParty8.Car car)
{
   //do you get it?
}

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

  string strName = this.GetType().Name;

  if (strName == ThirdParty8.ClassName)
  { ...

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

  string strName = this.GetType().Name;

  if (strName == ThirdParty8.ClassName)
  { ...

我想你的意思是

#if VERSION8
using ThirdParty8
#else
using ThirdParty9
#endif

如果它是正确的,也许你可以定义一个像VERSION8这样的条件,用它编译或者不用它

#if VERSION8
using ThirdParty8
#else
using ThirdParty9
#endif

如果它是正确的,也许您可以定义一个类似VERSION8的条件,并使用或不使用它进行编译。

您可以通过使用C指令进行一些操作来避免这种情况

#if DEF_USE_TP8
using ThirdParty8;
#endif
这是一个C风格的问题解决方案,然后从相同的源代码编译两个单独的DLL,每个DLL使用适当的编译器指令编译,但这不是C风格的解决方案

我的偏好是回到库提供者那里,询问他们为什么在底层对象接口没有更改的情况下更改名称空间,并解释这实际上破坏了他们所有的客户代码


这个问题的答案可能会帮助你理解为什么以及你现在和将来需要做什么来处理这个问题。i、 是否存在接口差异?他们会在下一个版本中也这么做吗?等等。

你可以通过用C指令做一些事情来回避这个问题

#if DEF_USE_TP8
using ThirdParty8;
#endif
这是一个C风格的问题解决方案,然后从相同的源代码编译两个单独的DLL,每个DLL使用适当的编译器指令编译,但这不是C风格的解决方案

我的偏好是回到库提供者那里,询问他们为什么在底层对象接口没有更改的情况下更改名称空间,并解释这实际上破坏了他们所有的客户代码


这个问题的答案可能会帮助你理解为什么以及你现在和将来需要做什么来处理这个问题。i、 是否存在接口差异?他们会在下一个版本中也这么做吗?等等。

我不认为我完全理解您的问题,但是如果您有一个名称相同的类和不同的dll,您应该使用它们的全名,如ThirdParty8.ClassName和ThirdParty9.ClassName为什么不使用Comalization Arguments如果您在源代码中使用这些程序集,这是否意味着您已经在解决方案中导入了对这两个DLL的引用?我不确定您是否可以在只存在一个DLL的目标系统上加载编译后的代码-即使代码的设计确保从未使用特定于库的类。你应该研究Assembly.LoadFrom on方法,看看它是否有帮助。我不认为我完全理解你的问题,但是如果你有一个同名类和不同的dll,你应该使用它们的全名,比如ThirdParty8.ClassName和ThirdParty9.ClassName为什么不使用Comalization参数如果你在源代码中使用这些程序集,这是否意味着您已经在解决方案中导入了对这两个DLL的引用?我不确定您是否可以在只存在一个DLL的目标系统上加载编译后的代码-即使代码的设计确保从未使用特定于库的类。您应该查看Assembly.LoadFrom on方法,看看它是否有用。如果OP希望发布应用程序的“一个版本”,那么这种技术仍然可以使用——通过一些巧妙的项目定义、构建目标和编写良好的安装程序,这就是实现这一点的方法。感谢您如果OP希望发布“一个版本”的应用程序,这种技术仍然可以使用——通过一些巧妙的项目定义、构建目标和编写良好的安装程序,这将是一种方法。非常感谢。