簡體   English   中英

Visual Studio 說當前上下文中不存在名稱

[英]Visual Studio saying name doesn't exist in current context

我正在像這樣的類上調用靜態方法

Foo.bar()

Visual Studio 的智能感知為我識別 Foo 並自動完成欄(它突出顯示 Foo 並且一切正常)。 在我開始構建項目之前,一切看起來都很好,它拋出一個錯誤,指出當前上下文中不存在名稱 Foo。

我在其他文件中使用這個靜態方法調用,所以我知道這個類沒問題。 情況太大而無法發布代碼,所以我主要是在尋找開始調查的原因,這會導致智能感知正常運行,但在編譯時會出現這樣的錯誤。

我已經看到這個錯誤是由不同項目中不同版本的 .NET 框架引起的。 我構建的類庫是 4.5,應用程序是 4.0,但它給出的唯一錯誤是命名空間錯誤。 更改類庫上的框架版本並重建它,然后是應用程序,解決了錯誤。

當命名空間、類和變量在名稱相同時變得混亂時,就會發生這種情況。 我以前受過這種苦。 智能感知告訴我我是對的,編譯器告訴我我錯了! 我相信編譯器!

你有 2 個我能想到的選擇

  1. 在你的代碼中搜索 Foo,看看它被用於靜態類以外的東西。

  2. 完全限定 Foo.bar() 調用。 MyApplication.This.That.Foo.bar();

按這個順序做……最好優雅地解決問題,這樣你就可以調用 Foo.bar() ,因為這比MyApplication.This.That.Foo.bar();更具可讀性和可維護性MyApplication.This.That.Foo.bar(); 到處都是!

在我的例子中,我在代碼中間的一個方法的末尾遺漏了一個} ,這導致程序看不到其余的代碼並抱怨我在那之后定義的方法。

我知道這是一個有點老的話題,但我剛剛經歷了同樣的事情,對我來說這是因為該文件實際上並未包含在解決方案中。

我正確地發生了,因為我重命名了類,然后重命名了文件,這導致 Visual Studio 仍然知道類和命名空間,但是編譯器沒有得到文件,因為重命名的文件沒有包含在內。

我知道舊線程,但是在從單元測試項目中引用靜態方法時遇到了這個問題 - 智能感知說該方法在那里,但是當我嘗試構建/運行測試(在調試模式下)時,我得到了錯誤'名稱在當前上下文中不存在'。 為了修復它,我必須在調試配置中重建包含引用的靜態方法的項目(它之前僅在發布配置中構建) - 在此之后,測試構建並運行正常。

考慮對有問題的項目進行清理,然后進行構建。 編輯器和 Intellisense 有可能正確發現類,而編譯器則處理過時的文件。 (我遇到了同樣的問題,這就是我解決它的方法。)

這是我知道的一篇舊文章,但我剛剛遇到這個問題並且讓我困惑了幾天,最終得到了解決:在解決方案資源管理器中單擊類文件,然后查看屬性選項卡; 確保構建操作設置為“編譯”。

調整相關文件。 如果Default.aspx.cs的錯誤代碼,您需要更改文件Default.aspx的第一行,如下所示:

"CodeFile="替換為"CodeBehind"

希望這能有所幫助。

-謝謝, Thai_FUV

我遇到過幾次這個問題,所以當我這樣做時,我檢查的第一件事是無法識別的程序集是否有任何 Nuget 包。 在我的情況下,他們總是有,我只是忘記在程序集中安裝相同的包,其中對無法識別的程序集的引用所在的程序集。重新構建命令並修復了問題。 我希望這可以幫助別人。 可以針對多種情況給出相同的錯誤消息,因此這種特殊情況可能不適用。 如果您沒有使用過 Nuget,我建議您嘗試其他答案

我也在創建數據訪問層時遇到了這個問題,並且調用了具有相同症狀的靜態方法:Intellisense 找到了它,但沒有找到編譯器。 我嘗試了上面的許多方法,包括修復 .Net 版本。

將源文件添加到項目時,我還更改了命名空間。 對於有問題的文件,我忘記更改命名空間以匹配在其他時間導入時的命名空間。

關閉 MonoDevelop 的所有選項卡。 然后關閉 MonoDevelop。 最后再次打開 MonoDevelop 為我解決了問題。

我的是一個更復雜的解決方案。 項目 A 引用了項目 B 和 C:兩個引用都將 Copy Local 設為 true,並且都生成了名稱相同的程序集。 在構建引用項目時,項目 B 和 C 的輸出程序集被復制,並且一個覆蓋另一個,因為它們具有相同的名稱。 VS 然后在構建目錄中查找引用,並且只找到“獲勝”的程序集。

我對這個時不時發生的問題的解決方案:

  1. 在解決方案資源管理器和“從項目中排除”中找到給您帶來問題的類
  2. 重建該程序集(我們稱之為“A”)
  3. 使用文件(“B”)的項目會要求你“重新加載”項目,等待
  4. 將文件重新添加到您剛剛從中刪除的程序集 A 中,然后重新構建
  5. 現在,重新加載項目 B

然后在VS中找到該文件,一切正常。

就我而言,我不得不重新加載標記為“丟失”的項目。

  1. 項目 > 卸載項目
  2. 項目 > 加載項目
  3. 清潔,構建解決方案

更改控件的 ID 為我解決了這個問題。 顯然控件的 id 存在於解決方案的另一部分。

就我而言,我的 csproj 文件中缺少以下幾行

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DefineConstants>TRACE</DefineConstants>
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>

一旦我添加了這個,我就可以在調試時看到變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM