programing

'__o' 이름이 현재 컨텍스트에 없습니다.

css3 2023. 7. 19. 21:30

'__o' 이름이 현재 컨텍스트에 없습니다.

방금 Visual Studio 2015를 설치하고 작업하던 asp.net 프로젝트를 열었습니다.아래와 같은 오류가 많이 발생합니다(모두 정확히 동일).

오류 CS0103 '__o' 이름이 현재 컨텍스트에 없습니다.

음, 사실 저는 '__o'라는 이름의 변수가 없고 코드가 마치 부적처럼 작동합니다(오류는 무효입니다). 하지만 저를 괴롭히는 것은 제 코드가 이 목록의 어딘가에 있을 때 정말로 오류가 있을 때를 볼 수 없고 전체 목록을 확인해야 한다는 것입니다.

enter image description here

빌드 + IntelliSense 대신 Build Only(빌드 + IntelliSense)를 선택하면 IntelliSense와 관련된 오류가 사라집니다.

enter image description here

업데이트 1: 이유

이러한 현상이 발생하는 이유는 다음과 같은 코드의 경우입니다.

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

설계 시 <%=%> 블록에 IntelliSense를 제공하기 위해 ASP.NET은 임시 __o 변수 및 언어(VB 또는 C#)에 대한 할당을 생성한 다음 변수에 IntelliSense를 제공합니다.이는 페이지 컴파일러가 첫 번째 <%=... %> 블록을 볼 때 수행됩니다.그러나 여기서 블록은 if 내부에 있으므로 if가 닫힌 후 변수는 범위를 벗어납니다.우리는 결국 다음과 같은 것을 생성하게 됩니다.

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

해결 방법은 페이지 초반에 더미 식을 추가하는 것입니다.예.

<%=""%>

이렇게 하면 아무것도 렌더링되지 않으며 잠재적인 if(또는 다른 범위 지정) 문 앞에 __o가 렌더 메서드에서 최상위 수준으로 선언됩니다.

업데이트 2: 다른 IntelliSense 오류를 잃지 않고 이 오류 제거

오류 목록 패널의 왼쪽 상단 모서리에 있는 필터 버튼을 클릭하고 다음에 대한 오류 코드인 CS0103의 선택을 취소합니다.'__o'라는 이름은 현재 컨텍스트에 존재하지 않으며 이러한 오류는 더 이상 표시되지 않으며 다른 IntelliSense 오류 및 경고가 계속 발생할 수 있습니다.

enter image description here

위의 설명에 나와 있는 링크를 읽어본 결과, 차단 시 지능형 처리 방법이 밝혀졌습니다.

Mikhail Archipov는 ASP.NET 포럼에 다음과 같은 설명과 해결 방법을 게시했습니다.

우리는 마침내 신뢰할 수 있는 평판을 얻었고 근본적인 문제를 확인했습니다.사소한 비난은 다음과 같습니다.

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

정보를 제공하기 위해.<%= %>시 , 설시블, ASP에 합니다.NET은 임시 할당을 생성합니다.__o변수 및 언어(VB 또는 C#)를 입력한 다음 변수에 대한 인텔리전스 라이센스를 제공합니다.으로 그은페이컴첫번볼때수다행니됩째를가러것파를 볼 때 이루어집니다.<%= ... %>은 록입니다 안에 . 하지만 여기 블록은 안에 있습니다.if 그서그 후에래 에.if닫히면 변수가 범위를 벗어납니다.우리는 결국 다음과 같은 것을 생성하게 됩니다.

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

해결 방법은 페이지 초반에 더미 식을 추가하는 것입니다.예.<%="" %>이것은 아무것도 만들어내지 않을 것이고, 그것은 확실히 할 것입니다.__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

다음과 같이 코드에서 변수 __o를 선언합니다.

public object __o;

마스터 페이지(사용 중인 경우)에 마스터 페이지를 표시해야 합니다.

<% 응답.<% = var %> 대신 write(var) %>를 사용하면 제안된 다른 게시물로 __o를 선언하지 않고 오류가 제거됩니다.

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

이 문제를 마음으로부터 해결한 것은 페이지 초반에 더미 표현을 추가하는 것이었습니다.예: <%=" " %>자세한 설명은 다음 링크를 참조하십시오. https://forums.asp.net/post/1263727.aspx

저는 예전에 ASP.net MVC 프로젝트를 수행했습니다. 바로 위에 있는 마스터 페이지에 이것을 넣었는데, <%=" %>가 도움이 되지 않는 경우가 적어도 한 번은 있었습니다.

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

언급URL : https://stackoverflow.com/questions/31886413/the-name-o-does-not-exist-in-the-current-context