C#-編譯器錯誤CS0246

C#-編譯器錯誤CS0246

找不到類型或名稱空間名稱“類型/名稱空間”(您是否缺少using指令或程序集引用?)

找不到程序中使用的類型或名稱空間。您可能忘記了引用(-reference)包含該類型的程序集,或者您可能尚未添加所需的using指令。或者,您嘗試引用的程序集可能存在問題。

以下情況導致編譯器錯誤CS0246。

您是否拼寫了類型或名稱空間的名稱?沒有正確的名稱,編譯器將找不到類型或名稱空間的定義。經常發生這種情況是因爲類型名稱中使用的大小寫不正確。例如,Dataset ds;生成CS0246,因爲必須將Dataset中的s大寫。

如果錯誤是由於名稱空間名稱引起的,是否向包含名稱空間的程序集添加了引用(-reference)?例如,您的代碼可能包含指令using Accessibility。但是,如果您的項目未引用程序集Accessibility.dll,則會報告錯誤CS0246。有關更多信息,請參見管理項目中的引用。

如果錯誤是由於類型名稱引起的,那麼您是否包括正確的using指令,或者完全限定類型的名稱?考慮以下聲明:DataSet ds。要使用該DataSet類型,您需要做兩件事。首先,您需要引用包含DataSet類型定義的程序集。其次,您需要一個using用於名稱空間所在DataSet位置的指令。例如,由於DataSet位於System.Data命名空間,你需要下面的指令在你的代碼的開頭:using System.Data。

該using指令不是必需的。但是,如果省略該指令,則DataSet在引用該指令時必須完全限定該類型。完全限定意味着您每次在代碼中引用類型時,都要同時指定名稱空間和類型。如果您using在上一個示例中省略了指令,則必須編寫System.Data.DataSet ds來聲明ds而不是DataSet ds。

您是否在期望使用類型的變量或其他語言元素上使用過?例如,在is語句中,如果使用Type對象而不是實際類型,則會出現錯誤CS0246。

您是否引用了基於比程序目標框架更高的框架版本構建的程序集?還是您所引用的項目的目標框架版本高於該程序的目標框架?例如,您處理針對.NET Framework 4.6.1的項目,並使用針對.NET Framework 4.7.1的項目中的類型。然後,您會收到錯誤CS0246。

您是否在未完全限定類型名稱的情況下使用using別名指令?一個using別名指令不使用using的源代碼文件指令來解決類型。下面的示例生成CS0246,因爲類型List不是完全限定的。該using指令對System.Collections.Generic不能防止錯誤。

using System.Collections.Generic;  

// The following declaration generates CS0246.  
using myAliasName = List<int>;   

// To avoid the error, fully qualify List.  
using myAliasName2 = System.Collections.Generic.List<int>;  

如果您在以前運行的代碼中遇到此錯誤,請首先在解決方案資源管理器中查找丟失或未解決的引用。您需要重新安裝NuGet軟件包嗎?有關構建系統如何搜索引用的信息,請參閱解決團隊構建中的文件引用。如果所有引用似乎都是正確的,請查看您的源代碼管理歷史記錄,以查看.csproj文件和/或本地源文件中的更改。

如果尚未成功訪問引用,請使用對象瀏覽器檢查應該包含此名稱空間的程序集,並驗證該名稱空間是否存在。如果使用“對象瀏覽器”驗證程序集包含名稱空間,請嘗試刪除using該名稱空間的指令,然後查看其他中斷之處。根本問題可能出在另一個程序集中。

下面的示例生成CS0246,因爲using缺少必要的指令。

// CS0246.cs  
//using System.Diagnostics;  
  
public class MyClass  
{  
    // The following line causes CS0246. To fix the error, uncomment  
    // the using directive for the namespace for this attribute,  
    // System.Diagnostics.  
    [Conditional("A")]  
    public void Test()  
    {  
    }  
  
    public static void Main()  
    {  
    }  
}  

下面的示例導致CS0246,因爲Type在期望實際類型的地方使用了類型的對象。

// CS0246b.cs  
using System;  
  
class ExampleClass  
{  
    public bool supports(object o, Type t)  
    {  
        // The following line causes CS0246. You must use an  
        // actual type, such as ExampleClass, String, or Type.  
        if (o is t)  
        {  
            return true;  
        }  
        return false;  
    }  
}  
  
class Program  
{  
    public static void Main()  
    {  
        ExampleClass myC = new ExampleClass();  
        myC.supports(myC, myC.GetType());  
    }  
}  

除此之外
在解決方案資源管理器刷新一下也有可能解決
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章