名称“__o”在当前上下文中不存在

我刚刚安装了Visual Studio 2015,并打开了我正在开发的asp.net项目。 我收到许多错误(完全相同),如下所示:

错误CS0103名称“__o”在当前上下文中不存在

那么其实我没有任何名为__o的variables,代码就像一个魅力(错误是无效的),但困扰我的是,我无法看到当我的代码真的有一个错误,因为它在这个列表中的某处我应该检查整个清单。

在这里输入图像说明

我发现如果我selectBuild Only而不是Build + IntelliSense ,错误(与intellisense有关)将会消失。

在这里输入图像说明

更新1:原因

发生这种情况的原因是这样的代码:

<% if (true) { %> <%=1%> <% } %> <%=2%> 

为了在devise时在<%=%>块中提供智能感知,ASP.NET生成一个临时__ovariables和语言(VB或C#)的赋值,然后为该variables提供智能感知。 当页面编译器看到第一个<%= …%>块时就完成了。 但是在这里,块在if里面,所以if在closures之后,variables超出了范围。 我们最终生成这样的东西:

 if (true) { object @__o; @__o = 1; } @__o = 2; 

解决方法是在页面的早期添加一个虚拟expression式。 例如<%=“”%>“。 这将不会呈现任何东西,并且会确保在任何可能的if(或其他范围)语句之前,将__o声明为Render方法中的顶层。

更新2:摆脱这个错误,而不会失去其他智能错误

点击错误列表面板左上angular的filterbutton,取消CS0103的错误代码: 名称'__o'在当前上下文中不存在 ,这些错误将不再显示,您仍然可以有其他智能错误和警告:

在这里输入图像说明

在阅读上面评论中给出的链接之后,事实certificate,如果阻塞,智能感知如何处理。

Mikhail Arkhipov在ASP.NET论坛上发布了一个解释和解决方法:

我们终于获得了可靠的回报,并确定了潜在的问题。 一个微不足道的repro看起来像这样:

 <% if (true) { %> <%=1%> <% } %> <%=2%> 

为了在devise时在<%= %>块中提供智能感知,ASP.NET生成一个临时__ovariables和语言(VB或C#)的赋值,然后为该variables提供智能感知。 当页面编译器看到第一个<%= ... %>块时就完成了。 但是在这里,块在if里面,所以ifclosures之后,variables超出了范围。 我们最终生成这样的东西:

 if (true) { object @__o; @__o = 1; } @__o = 2; 

解决方法是在页面的早期添加一个虚拟expression式。 例如<%="" %> 。 这将不会呈现任何东西,并且会确保在任何可能的if (或其他范围)语句之前,将__o声明为Render方法中的顶层。

注意上面, 失败的答案实际上并没有造成太大的伤害,除了隐藏所有intellisense错误,这些错误在构build时都是已知的。

参考: http : //youku.io/questions/324366/asp-net-mvc-error-name-o-is-not-declared https://msdn.microsoft.com/en-us/library/t8zbaa6f.aspx

<%response.write(var)%>而不是<%= var%>移除错误而不声明__o为build议其他职位

http://forums.asp.net/p/923745/1266105.aspx

对我来说,解决这个问题的核心是在页面的早期添加一个虚拟expression式。 例如<%=“”%>“。 查看这个链接进一步的解释: 在这里input链接描述

在代码中声明variables__o,如下所示:

 public object __o; 

一定要把它放在母版页如果你正在使用 )。