好的,摆弄一下,我可以得到一些Warnings
但不是错误。根据 MSDN,ExtensionAttribute
随着 Net 3.0 和HandleProcessCorruptedStateExceptionsAttribute
NET 4.0 的出现。因此,为了使 NET 2.0 代码与 4.0 项目兼容,它提供了缺少的属性。警告只是它们被多重定义,并且由于它们只是属性,我认为这并不重要。
无需将它们注释掉,有两种简单的方法可以消除警告。
方法 1(我认为更好):为 Net 2.0 和 4.0 构建创建解决方案。
打开基本的 Net 2.0 解决方案。在解决方案资源管理器中选择解决方案 (dnlib)。在 File 菜单上选择Save dnlib.sln As并dnlib20.sln
用作文件名。这是您的 NET 2.0 框架解决方案。
再次另存为,这次是dblib40.sln
. 稍后,这将是您的 Net 4.0 Framwwork 解决方案。将控制台测试项目和 dnlib 库项目都切换到 Net 4.0 目标平台。然后,在解决方案资源管理器中,从解决方案中排除最后 2 个文件: HandleProcessCorruptedStateExceptionsAttribute.cs
和ExtensionAttribute.cs
. 保存它,清理并构建,你应该会很好。
您不需要这两个文件,因为 NET 已经定义了它们(这是警告);它们仅适用于 2.0 项目/解决方案。
注意:您也可以将其设置为将解决方案编译到自己的文件夹中,这样您就不会混淆它们。在 Build 选项卡上,下一个输出添加一个文件夹(..\Debug\bin\Net20
和..\Debug\bin\Net40
)。您必须更改/更新 Debug 和 Release 版本。
方法二:定义一些条件编译器常量。
如上所述创建dblib20.sln
和dblib40.sln
解决方案(除非您甚至不想使用 2.0)。请务必在 4.0 解决方案中将 Framework 设置为 NET 4。
在 Net 2.0 dnlib项目文件中,进入Project Properties --> Build --> General添加条件编译符号NET20
。现在,HandleProcessCorruptedStateExceptionsAttribute.cs
将代码包装在一个#if
:
#if NET20
using System;
#pragma warning disable 1591 // XML doc warning
namespace System.Runtime.ExceptionServices {
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
sealed class HandleProcessCorruptedStateExceptionsAttribute : Attribute {
}
}
#endif
在ExtensionAttribute.cs
中,做同样的事情。然后清理并重建,一切都应该很好。由于符号仅在 NET20 解决方案中定义,因此只有在您使用/打开 Net 2.0 解决方案时才会编译这些类。如果您下载另一个更新,除非他们提供 NET 4.0 解决方案文件,否则您将不得不重做。
AFAIK,仍然没有任何内置的 FrameWork 常量。
最后,当这些警告被清除时,有 5 个比较警告,但从外观上看,这些可以被忽略(代码似乎在做它想做的事)。