无法编译 C# 项目,因为引用外部 dll 时出现一些元组错误


当我

尝试构建我的 .net 4 c# 项目时,我遇到了错误。一切正常,但是当我向给定 DLL 添加外部引用时,它停止工作,无法构建,抛出这种类型的一些错误:

错误 36 类型"System.Tuple"存在于"C:\Program Files\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\mscorlib.dll"和"C:\Projects\Project1\ExternalRefernces\SharpSNMP\SharpSnmpLib.dll"C:\Projects\Project1\CheckerStore.cs 17 21

请注意,我没有对新库做任何事情,只是作为参考添加。有什么想法吗?

您可以通过指定外部别名来解决此问题。在项目中选择锐化 SNMP 引用。在属性窗口中,将Aliasesglobal更改为SharpSNMP。在您的代码中键入此

extern alias SharpSNMP;
...
System.Tuple<T1,T2> sysTulpe;
SharpSNMP::System.Tuple<T1,T2> sharpTulpe;

extern alias SharpSNMP;
using SharpSystem = SharpSNMP::System;
...
System.Tuple<T1,T2> sysTulpe;
SharpSystem.Tuple<T1,T2> sharpTulpe;

请参阅别名:克服名称冲突第 2 部分:外部别名

您可以做的是将目标版本更改为 3.5,或者在 SharpSNMPLib 中进行一些更改。可以从此处或此处获取源。

您需要进行的更改是专门将 System.Tuple 类型移动到其他地方。

编辑:
我相信您已经添加了对预编译 DLL 的引用。未针对框架版本 4 编译的 DLL。您需要做的是下载源代码(请参阅上面的链接)并使用目标版本 4 编译项目。

之所以需要这样做,是因为存在取决于框架目标版本的条件生成参数。SharpSNMPLib System.Tuple 用于版本 <= 3.5,框架 System.Tuple 用于版本>= 4。

编辑:

  • 使用框架System.Tuple和SharpSNMPLib.dll重现了您的问题。

  • 成功构建针对版本 4 的 SharpSNMPLib。

  • 使用框架System.Tuple和新的SharpSNMPLib.dll成功构建应用程序。

只需转到您的CheckerStore.cs文件,第 1721 行(如果我是对的)。找到Tuple类,并使用其完全限定名引用它。

由于某种原因,库重新实现了某些系统类型。可能的原因是在使用较旧版本的框架时使代码与源代码级别兼容。

很可能有一个版本的SharpSNMP库适用于4.0框架。检查源代码树中是否已正确打开。与库的创建者核实您需要在给定框架版本中使用哪些版本的程序集,以及建议的执行方法。

最新更新