我刚刚安装了 VisualStudio2015并打开了我的 ASP。我正在做的一个网络项目。我收到了许多错误(完全一样) ,如下所示:
错误 CS0103名称“ _ _ o”在当前上下文中不存在
实际上我没有任何名为“ _ _ o”的变量,代码的工作原理就像一个符号(错误是无效的) ,但是困扰我的是,我不能看到当我的代码真的有一个错误,因为它在这个列表中的某个地方,我应该检查整个列表。
我发现如果我选择 只建造而不是 构建 + 智能感知,那么与智能感知相关的错误就会消失。
更新1: 原因
发生这种情况的原因是,对于这样的代码:
<% if (true) { %> <%=1%> <% } %> <%=2%>
为了在设计时在 <% =% > 块中提供智能感知,ASP.NET 生成临时 _ _ o 变量和语言(VB 或 C #)的赋值,然后为变量提供智能感知。这在页面编译器看到第一个 <% = ...% > 块时完成。但是这里,块在 if 中,所以在 if 关闭之后,变量就超出了作用域。我们最终产生了这样的东西:
if (true) { object @__o; @__o = 1; } @__o = 2;
解决办法是在页面的早期添加一个虚拟表达式。
<%=""%>
这将不会呈现任何内容,并且它将确保在 Render 方法中声明 _ _ o 为顶级,在任何潜在的 if (或其他范围)语句之前。
更新2: 在不丢失其他 IntelliSense 错误的情况下删除此错误
点击错误列表面板左上角的过滤器按钮,取消选中 CS0103,因为: 名称“ _ _ o”在当前上下文中不存在的错误代码将不再显示,你仍然可以有其他的 IntelliSense 错误和警告:
在阅读了上面的评论中给出的链接之后,我们发现这就是智能感知处理 if 块的方式。
Mikhail Arkhipov 在 ASP.NET 上发布了一个解释和解决方案 论坛: 我们终于获得了可靠的复制品,并找到了潜在的问题。一个微不足道的复制品看起来是这样的: <% if (true) { %> <%=1%> <% } %> <%=2%> 为了在设计时在 <%= %>块中提供智能感知,ASP.NET 生成对临时 __o变量和语言的赋值 (VB 或 C #)然后为变量提供智能感知 当页面编译器看到第一个 <%= ... %>块时完成 块位于 if内部,所以在 if关闭之后,变量就出去了 我们最终产生了这样的东西: if (true) { object @__o; @__o = 1; } @__o = 2; 解决方法是在页面的早期添加一个虚拟表达式。例如 <%="" %>。这不会造成任何影响,它会确保 在 Render 方法中,__o被声明为顶级,在任何 潜在的 if(或其他范围)语句。
Mikhail Arkhipov 在 ASP.NET 上发布了一个解释和解决方案 论坛:
我们终于获得了可靠的复制品,并找到了潜在的问题。一个微不足道的复制品看起来是这样的:
为了在设计时在 <%= %>块中提供智能感知,ASP.NET 生成对临时 __o变量和语言的赋值 (VB 或 C #)然后为变量提供智能感知 当页面编译器看到第一个 <%= ... %>块时完成 块位于 if内部,所以在 if关闭之后,变量就出去了 我们最终产生了这样的东西:
<%= %>
__o
<%= ... %>
if
解决方法是在页面的早期添加一个虚拟表达式。例如 <%="" %>。这不会造成任何影响,它会确保 在 Render 方法中,__o被声明为顶级,在任何 潜在的 if(或其他范围)语句。
<%="" %>
注意到以上,除了隐藏所有的智能感知错误外,失败的答案实际上并没有造成多大的伤害,这些错误在构建时就已经知道了。
参考文献: 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
Http://forums.asp.net/p/923745/1266105.aspx
对我来说,从根本上解决这个问题的方法是在页面的早期添加一个虚拟表达式。例如:。查看这个链接以获得进一步的解释: https://forums.asp.net/post/1263727.aspx
在代码中声明 variable _ _ o,如下所示:
public object __o;
一定要把它放在 主页(如果你正在使用的话)。
我以前的 ASP.net MVC 项目把这个放在我的主页的顶部,它至少在一个 <% = “”% > 没有帮助的情况下起到了作用:
<script runat="server" type="text/C#"> public object __o; </script>