1. ホーム
  2. c#

名前 '__o' は現在のコンテキストに存在しない

2023-09-22 09:40:23

質問

Visual Studio 2015 をインストールし、作業していた asp .net プロジェクトを開いたところです。以下のようなエラー(全て全く同じ)が多発しています。

エラー CS0103 名前 '__o' は現在のコンテキストに存在しません。

しかし、私を悩ませるのは、私のコードが本当にエラーになったとき、それがこのリストのどこかに行ってしまい、私はリスト全体をチェックする必要があるため、見ることができないことです。

どのように解決するのですか?

私は私が選択した場合、私は ビルドのみ ではなく ビルド+インテリセンス と入力すると、(インテリセンスに関連した)エラーはなくなります。

更新1:その理由

このようなことが起こる理由は、このようなコードに対してです。

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

設計時に <%= %> ブロックでインテリセンスを提供するために、ASP.NET は一時的な __o 変数と言語 (VB または C#) への割り当てを生成して、その変数にインテリセンスを提供します。これは、ページコンパイラが最初の <%= ... %> ブロックを見たときに実行されます。しかし、ここでは、ブロックはifの中にあるので、ifが閉じた後、変数はスコープ外に出てしまいます。結局、次のようなものが生成されます。

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

回避策としては、ページの早い段階でダミーの式を追加することです。例えば

<%=""%>

これは何もレンダリングしません。そして、__oがRenderメソッドのトップレベルで、潜在的なif(または他のスコープ)文の前に宣言されていることを確認します。

更新 2: 他の IntelliSense エラーを失うことなくこのエラーを取り除く。

エラー一覧パネルの左上にあるフィルターボタンをクリックし、エラー一覧パネルにある CS0103 というエラーコードが表示されます。 名前 '__o' は現在のコンテキストに存在しません。 というエラーコードが表示され、これらのエラーは表示されなくなり、他のIntelliSenseエラーや警告が表示されるようになります。