1

当我尝试构建我的 .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

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

4

4 回答 4

8

您可以通过指定外部别名来解决此问题。在您的项目中选择 SharpSNMP 参考。在属性窗口中更改Aliases为。在你的代码中输入这个globalSharpSNMP

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 部分:外部别名

于 2012-05-31T21:39:22.343 回答
6

您可以做的是将目标版本更改为 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 成功构建应用程序。

于 2012-05-31T21:33:28.257 回答
1

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

于 2012-05-31T21:17:39.753 回答
1

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

很可能有这个 SharpSNMP 库的一个版本可以与 4.0 框架一起使用。检查您的源代码树中是否已正确打开。与库的创建者一起检查您需要使用给定框架版本的程序集版本以及推荐的执行方式。

于 2012-05-31T21:34:11.977 回答