首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试将其引用到其他项目时出现dnlib库问题

尝试将其引用到其他项目时出现dnlib库问题
EN

Stack Overflow用户
提问于 2014-07-26 18:27:28
回答 2查看 2.3K关注 0票数 2

使用VisualStudio 2013,我成功地编译了德尼布的最新版本,这是ConfuserExde4dot项目的一部分,dnlib项目默认目标是.NET Framework2.0,因此它应该兼容于其他针对更高版本的项目中引用它,但是当我在项目中引用生成的dnlib.dll时,该项目的.NET框架大于3.0E 210项目无法编译。

有,任何编译错误信息,只是一个VisualStudio消息箱,上面写着:

存在构建错误。是否继续并运行上一次成功的构建?

我在一个(新的、空的) dnlib.dll项目中使用了dnlib.dll的调试和发布版本,我尝试了针对FW 3.5、4.0、4.5和4.5.1,但是该项目已经成功地编译,只针对FW2.0和3.0。

另一方面,我完全能够浏览库成员,并在其中执行类以及所有这些,但无法使用引用的dnlib.dll编译项目。

我认为,如果dnlib项目中的默认FW目标是2.0,这是有充分理由的,因为它会触摸外部程序集,所以我不确定通过在dnlib项目中增加FW目标来解决这个问题,但无论如何,我尝试将其增加到4.0,以查看哪些有着落,并且我在中获得了很多关于类型防御的编译器错误。

我漏掉了什么?

如何解决这个问题,以便能够用引用的FW2.0目标dnlib.dll编译一个以FW4.0为目标的项目?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-29 18:20:18

好的,随便摆弄一下,我可以得到一些Warnings,但没有错误。根据MSDN,ExtensionAttribute是在NET3.0中产生的,而HandleProcessCorruptedStateExceptionsAttribute是在NET4.0中产生的。因此,为了使NET2.0代码与4.0项目兼容,它提供了缺少的属性。警告只是表示它们是乘法定义的,而且由于它们只是属性,所以我认为这并不重要。

与其对它们进行评论,还有两种简单的方法来消除这些警告。

方法1(我认为更好):为Net2.0和4.0构建创建解决方案。

打开基本的Net2.0解决方案。在解决方案资源管理器中选择解决方案(dnlib)。在“文件”菜单上,选择,将dnlib.sln保存为,并使用dnlib20.sln作为文件名。这是您的NET2.0 FrameWork解决方案。

再次将保存为,这一次将保存到dblib40.sln。这将是您的NET4.0框架工作解决方案。将控制台测试项目和dnlib库项目切换到Net4.0目标平台。然后,在解决方案资源管理器中,从解决方案中排除最后两个文件:HandleProcessCorruptedStateExceptionsAttribute.csExtensionAttribute.cs。保存它,清洁和建造,你应该是好的。

您不需要这两个文件,因为NET已经定义了它们(这是警告);它们只适用于2.0项目/解决方案。

注意:您也可以设置它,以便将解决方案编译到它们自己的文件夹中,这样您就不会混淆它们。在Build上,下一个输出添加一个文件夹(..\Debug\bin\Net20..\Debug\bin\Net40)。您必须更改/更新调试和发布版本。

方法2:定义一些条件编译器常量。

创建如上所述的dblib20.slndblib40.sln解决方案(除非您甚至不想使用2.0)。确保在4.0解决方案中将框架设置为Net4。

在NET2.0dnlib项目文件中,转到项目属性-> Build -> General添加条件编译符号NET20。现在,在HandleProcessCorruptedStateExceptionsAttribute.cs中,将代码包装在一个#if

代码语言:javascript
复制
#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解决方案中定义,所以只有在使用/打开Net2.0解决方案时才会编译这些类。如果您下载了另一个更新,除非它们提供了一个NET4.0解决方案文件,否则您将不得不重新执行此操作。

AFAIK,仍然没有任何内置的FrameWork常量。

最后,当清除这些警告时,有5个比较警告,但从外观上看,这些警告可以忽略(代码似乎在做它想做的事情)。

票数 2
EN

Stack Overflow用户

发布于 2014-07-29 17:22:48

这对我起了作用:

将dnlib项目的目标版本更改为.NET 4.0框架客户端配置文件。将示例项目目标版本更改为.NET 4.0框架客户端配置文件。删除/注释掉中的ExtensionAttribute.cs中的ExtensionAttribute,删除/注释掉dnlib中的ExtensionAttribute.cs,然后编译,没有得到任何错误。

我使用了2012。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24974182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档