添加扩展方法,提示编译错误 “缺少编译器要求的成员”

新公司里用的Casltl MVC框架,项目基于.Net3.5。

一次调用返回json,发现使用火狐插件JsonView不能格式化json,使用Firebug查看,响应头里没有ContentType的键值。

使用VS插件reflector 查看MonoRail 的源码,发现渲染页面的方法RenderText 渲染后的响应头ContentType为 text/html。

于是我视图给 Castle.MonoRail.Framework.Controller 写个扩展方法 RenderJson ,设置响应头ContentType="application/json",这样JsonView也许就可以正确格式化返回的json了。

完成扩展方法后,这时编译报错:

  缺少编译器要求的成员“System.Runtime.CompilerServices.ExtensionAttribute..ctor

谷歌一番,有网友遇到同样的问题,原因是 Newtonsoft.Json.Net20.dll 引起的,因为该类库基于.Net 2.0,但是.Net 2.0不支持扩展方法,所以Json.net作者自己写了一个Attribute,来实现扩展方法,但是这个Attribute在.Net 3.0中已存在同名的,所以在基于.Net 3.0以上项目引用该类库时,就会出现冲突。

解决办法:

1、移除Newtonsoft.Json.Net20.dll后重新引用;(亲测可用)

 .

参考: Dozer  关于一个2.0下实现扩展方法所引发的错

原文地址:https://www.cnblogs.com/songxingzheng/p/4527906.html