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

Ash*_*ani 54 c# asp.net compiler-errors visual-studio visual-studio-2015

我刚刚安装了Visual Studio 2015并打开了我正在处理的asp .net项目.我收到的错误很多(都完全一样)如下:

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

实际上,我没有任何名为__o的变量,代码就像魅力一样(错误无效)但令我烦恼的是,我无法看到我的代码真的有错误,因为它在这个列表的某个地方我应该查看整个清单.

在此输入图像描述

Ash*_*ani 102

我发现,如果我选择Build Only而不是Build + IntelliSense,那么错误(与intellisense有关)将会消失.

在此输入图像描述

更新1:原因

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

<% if (true) { %>
    <%=1%>
<% } %>
<%=2%>
Run Code Online (Sandbox Code Playgroud)

为了在设计时在<%=%>块中提供intellisense,ASP.NET生成对临时__o变量和语言(VB或C#)的赋值,然后为变量提供intellisense.当页面编译器看到第一个<%= ...%>块时,就会这样做.但是在这里,块在if中,所以在if关闭之后,变量超出了范围.我们最终生成这样的东西:

if (true) { 
    object @__o;
    @__o = 1;
}
@__o = 2;
Run Code Online (Sandbox Code Playgroud)

解决方法是在页面的早期添加虚拟表达式.例如<%=""%>.这不会呈现任何内容,并且它将确保在任何可能的if(或其他作用域)语句之前,在Render方法中将__o声明为顶级.

更新2:摆脱此错误而不会丢失其他智能错误

单击错误列表面板左上角的过滤器按钮,取消选中CS0103,其错误代码为:当前上下文中不存在名称"__o",这些错误将不再显示,您仍然可以有其他智能错误和警告:

在此输入图像描述

  • 这里有同样的问题.我可以隐藏IntelliSense错误,但这似乎是在地毯下刷它.想要追踪问题. (5认同)
  • 这不像Dan说的那样,它只是隐藏了这个问题.此外,它会隐藏所有的IntelliSense错误,而不仅仅是那个错误. (2认同)

Sya*_*man 28

在阅读上面评论中给出的链接之后,事实证明是intellisense如何处理块.

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

我们终于获得了可靠的复制品并确定了潜在的问题.一个琐碎的repro看起来像这样:

<% if (true) { %>
    <%=1%>
<% } %>
<%=2%>
Run Code Online (Sandbox Code Playgroud)

为了<%= %>在设计时以块的形式提供intellisense ,ASP.NET生成对临时__o变量和语言(VB或C#)的赋值,然后为变量提供intellisense.当页面编译器看到第一个<%= ... %>块时就完成了.但是在这里,块在里面if,所以在if关闭之后,变量超出了范围.我们最终生成这样的东西:

if (true) { 
    object @__o;
    @__o = 1;
}
@__o = 2;
Run Code Online (Sandbox Code Playgroud)

解决方法是在页面的早期添加虚拟表达式.例如<%="" %>.这不会呈现任何内容,并且它将确保__o在任何潜在if(或其他作用域)语句之前在Render方法中声明最高级别.

注意上面,失败的答案实际上并没有造成太大的伤害,除了隐藏所有智能感知错误,这在构建时无论如何都是已知的.

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


Ome*_*r K 5

<% response.write(var) %> 而不是 <% =var %> 删除错误而不将 __o 声明为建议的其他帖子

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


小智 5

在代码中声明变量 __o,如下所示:

public object __o;
Run Code Online (Sandbox Code Playgroud)

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

  • 我不明白为什么有人应该-1这个答案。它比添加 &lt;%="" %&gt; 更优雅。 (2认同)