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());
}
}
除此之外
在解決方案資源管理器刷新一下也有可能解決