BC30560:'ExtensionAttribute'在名称空间'System.Runtime.CompilerServices'中不明确

时间:2012-08-24 07:23:06

标签: asp.net .net .net-4.0

我有asp.net项目(在.net 2.0中),我将项目转换为.net 4.0。 在我成功构建项目之后,我在浏览器上启动了网站,它会抛出以下错误:

  

编译错误

     

描述:编译资源期间发生错误   需要为此请求提供服务。请查看以下具体内容   错误详细信息并适当修改源代码。

     

编译器错误消息:BC30560:' ExtensionAttribute'是暧昧的   命名空间' System.Runtime.CompilerServices'。

     

来源错误:

     

[没有相关的源代码行]

     

源文件:InternalXmlHelper.vb Line:9

     

........

请给我一些解决方法。

7 个答案:

答案 0 :(得分:6)

在.NET 2中使用C#3(或更高版本)编译器使用扩展方法(对于LINQ等)的一个常见技巧是在正确的命名空间中定义自己的ExtensionAttribute。

现在您已升级到更高版本的.NET,您需要删除此现在冗余的额外属性。找到代码中定义的位置并将其删除。还要检查LINQBridge等外部库 - 你不再需要它了。

找到它的一种方法是使用对象浏览器并搜索ExtensionAttribute。

答案 1 :(得分:5)

这就是我发现问题的方法。

另一种简单的验证方法:在您的代码中,暂时在某处使用该类。例如:

System.Runtime.CompilerServices.ExtensionAttribute x = null;

构建时,会产生错误:

类型

  

'System.Runtime.CompilerServices.ExtensionAttribute'存在于两者中   'c:\ Program Files \ Reference   组件\微软\框架\ v3.5版本\ System.Core.dll'

和.....

立即告诉你导致冲突的两个来源。

答案 2 :(得分:2)

我有完全相同的错误,为我解决的是删除主题(在App_Themes下)。我没有尝试重新添加主题,看看它们是否还能正常工作,但至少删除了修复错误。

请注意,通过查看错误中的编译器详细信息,我发现它是主题导致此问题,并注意到它编译的唯一.vb文件与主题(自动生成)相关。我的项目都是C#,所以来自VB的错误让我找到了.vb文件。

答案 3 :(得分:0)

此错误也是因为您的aspx文件顶部没有page指令。这就是使用VB编译器的原因。

将此内容写到顶部:

<%@ Page Language="C#" %>

答案 4 :(得分:0)

我有这个错误。只需重新启动Visual Studio就可以使它消失。

答案 5 :(得分:0)

如果您对视图或部分文件使用不正确的文件扩展名,则在ASP.NET MVC Web应用程序中也会发生此错误。

我无意中使用了不正确的扩展名(.ascx而不是.cshtml)创建了一个视图,并收到了此错误消息。

将扩展程序更改为.cshtml修复了此问题。

答案 6 :(得分:0)

我有这个问题,下面列出的是对我有用的。

线索是错误消息提及<%@ Page Language="C#" %> 。我是C#程序员,为什么要提到VB组件?

如果您没有明确说明ASPX页面的编译语言,则可能会出现此问题。如果您没有明确,那么IIS将在任何设置为该站点的默认语言的情况下进行编译。如果你用C#编写,没有明确的编译语言,IIS中的默认编译语言是C#,那么快乐的日子。但是如果IIS中的默认编译语言设置为vb(默认情况下它似乎是这样),那么您的C#页面将被编译为就像它是vb一样,并且您得到BC30560错误。

最好的解决方法是明确aspx页面的编译语言,在每个aspx页面的顶部放置一个这样的指令:

c#

或者,您可以使页面不明确(无页面语言指令)并告诉IIS使用什么作为默认编译语言,如下所示:

使用IIS管理器 - &gt;去看看你的网站的根目录(它将是你的服务器名称)然后 - &gt;在ASP.NET部分 - &gt;双击.NET编译图标(蓝色向下箭头) - &gt;在设置列表中,在常规标题下,是默认语言的设置 - &gt;将其设置为web.config

如果需要,您还可以为每个网站设置默认语言。与上面相同,但是将其设置为左侧IIS树视图根目录下的网站,而不是它的根目录。请注意,如果您为网站设置default-language = c#,该设置会存储在您网站的根<system.web>中 - 在<compilation debug="false" defaultLanguage="c#" />部分,您将获得如下值: web.config。如果您在{{1}}中删除或覆盖该设置,它将恢复为IIS实例的默认设置。