Spread the love

Loading


Severity
CodeDescriptionProjectFileLineSuppression State
ErrorBC30451‘__o’ is not declared. It may be inaccessible due to its protection level.ProjectC:\inetpub\wwwroot\XYZ\ClientMasterPage.master87Active

I found out that if I choose Build Only instead of Build + IntelliSense the errors (that are related to IntelliSense) will go away.

enter image description here

Update 1: The Reason

The reason that this is happening is that for codes like this:

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

In order to provide IntelliSense in <%= %> blocks at design time, ASP.NET generates assignment to a temporary __o variable and language (VB or C#) then provide the IntelliSense for the variable. That is done when page compiler sees the first <%= … %> block. But here, the block is inside the if, so after the if closes, the variable goes out of scope. We end up generating something like this:

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

The workaround is to add a dummy expression early in the page. E.g.

<%=""%>

This will not render anything, and it will make sure that __o is declared top level in the Render method, before any potential if (or other scoping) statement.

Update 2: Getting rid of this error without losing other IntelliSense errors

Click on the filter button on the top left corner of the error list panel and uncheck the CS0103 which the error code for the: The name ‘__o’ does not exist in the current context and these errors will not be shown anymore and you can still have other IntelliSense errors and warnings:

enter image description here

Written by Michael Zhang

Leave a Comment

Your email address will not be published.