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

kmbjn2e3  于 2022-11-17  发布在  其他
关注(0)|答案(6)|浏览(297)

我刚刚安装了Visual Studio 2015,并打开了我正在工作的ASP.NET项目。我收到了许多错误(都完全相同),如下所示:
错误CS0103名称“__o”在当前上下文中不存在
实际上,我没有任何名为'__o'的变量,代码工作起来很有魅力(错误是无效的),但困扰我的是,当我的代码真的有错误时,我无法看到它在这个列表中的某个地方,我应该检查整个列表。

iqih9akk

iqih9akk1#

我发现如果选择Build Only而不是Build + IntelliSense,则错误(与IntelliSense相关的错误)将消失。

更新1:原因

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

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

为了在设计时在块中提供IntelliSense,ASP.NET生成对临时__o变量和语言的赋值(VB或C#)然后为该变量提供IntelliSense。这是在页面编译器看到第一个〈%= ... %〉块时完成的。但在这里,该块在if内部,因此在if关闭后,变量超出了作用域。我们最终会生成如下所示的结果:

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

解决方法是在页面的前面添加一个虚拟表达式。

<%=""%>

这将不会呈现任何内容,并且它将确保__o在Render方法中被声明为顶级,在任何潜在的if(或其他作用域)语句之前。

更新2:消除此错误而不丢失其他IntelliSense错误

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

o4hqfura

o4hqfura2#

阅读了上面注解中给出的链接后,原来是intellisense处理if块的方式。
Mikhail Arkhipov在ASP.NET论坛上发布了一个解释和解决方案:
我们最终获得了可靠的重现结果,并发现了潜在的问题。一个简单的重现结果如下:

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

为了在设计时在<%= %>块中提供intellisense,ASP.NET生成对临时__o变量和语言的赋值(VB或C#)然后为变量提供智能感知。这是在页面编译器看到第一个<%= ... %>块时完成的。但在这里,该块在if内部,因此在if关闭后,变量超出了作用域。我们最终会生成如下所示的结果:

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

解决方法是在页面的早期添加一个伪表达式。例如<%="" %>。这不会呈现任何内容,并且可以确保在Render方法中将__o声明为顶级,在任何潜在的if(或其他作用域)语句之前。
注意到上面的内容,Failure的答案实际上并没有造成太大的伤害,只是隐藏了所有的intellisense错误,这些错误在构建时就已经知道了。
参考:http://youku.io/questions/324366/asp-net-mvc-error-name-o-is-not-declaredhttps://msdn.microsoft.com/en-us/library/t8zbaa6f.aspx

nwlls2ji

nwlls2ji3#

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

public object __o;

请确保将其放在母版页中(* 如果您正在使用母版页 *)。

ztigrdn8

ztigrdn84#

〈% response.write(var)%〉而不是〈% =var %〉删除了错误,但没有像建议的那样声明__o其他帖子
http://forums.asp.net/p/923745/1266105.aspx

2vuwiymt

2vuwiymt5#

从本质上解决这个问题的方法是在页面的前面添加一个虚拟表达式。例如〈%="”%〉。查看下面的链接以获得进一步的解释:https://forums.asp.net/post/1263727.aspx

v8wbuo2f

v8wbuo2f6#

在我以前的ASP.net MVC项目中,我把这个放在母版页的最上面,它至少在〈%="”%〉没有帮助的一个示例中起了作用:

<script runat="server" type="text/C#">
public object __o;
</script>

相关问题