C#常见错误及解决方案

以下“解决方案”中的内容对应的是“错误信息”中内容的解决方法。
1. 编译器错误 CS0003
?? 错误信息
内存不足。
?? 解决方案
编译器无法分配足够的虚拟内存完成编译。关闭所有不必要的应用程序并重新编译。
可能还需要增加页文件的大小,请确保有可用的磁盘空间。
当 .NET Framework SDK 与 C# 编译器的版本不匹配时,或者当一个或多个支持 C# 编译器的文件损坏时,也可能出现此错误;请重新安装 Visual Studio。
2. 编译器错误 CS0012
?? 错误信息
类型“type”在未被引用的程序集中定义。必须添加对程序集“assembly”的引用。
?? 解决方案
未找到引用类型的定义。如果所需的 .DLL 文件没有包括在编译中,则可能发生这种情况。
下面的编译序列将导致 CS0012:
// cs0012a.cs
// compile with: /target:library
public class A {}
然后:
// cs0012b.cs
// compile with: /target:library /reference:cs0012a.dll
public class B
{
public static A f()
{
C#从入门到精通
2
return new A();
}
}
然后:
// cs0012c.cs
// compile with: /reference:cs0012b.dll
class C
{
public static void Main()
{
object o = B.f(); // CS0012
}
}
可以通过使用 /reference:b.dll;a.dll 进行编译来解决此 CS0012 错误。
3. 编译器错误 CS0014
?? 错误信息
无法找到所需的文件“file”。
?? 解决方案
编译器需要某个文件,但它不在系统上。请确保路径是正确的。如果该文件是 Visual Studio 系统文件,那么您可能需要修复安装,或者移除并彻底重新安装 Visual Studio。
4. 编译器错误 CS0015
?? 错误信息
类型“type”的名称太长。
?? 解决方案
用户定义类型的完全限定名必须少于或等于 2048 个字符。
5. 编译器错误 CS0017
?? 错误信息
程序“output file name”定义了不止一个入口点:function。


3
?? 解决方案
程序只能有一个 Main 方法。
若要解决该错误,可以删除代码中的所有 Main 方法,只保留一个,或者可以使用/main 编译器选项指定要使用的 Main 方法。
下面的示例生成 CS0017:
// CS0017.cs
public class clx
{
static public void Main()
{
}
}
public class cly
{
public static void Main() // CS0017, delete one Main or use /main
{
}
}
6. 编译器错误 CS0019
?? 错误信息
运算符“operator”无法应用在“type”和“type”类型的操作数。
?? 解决方案
二进制运算符所操作的数据类型是该运算符不能处理的数据类型。例如,不能对字符串使用 || 运算符。
下面的示例生成 CS0019:
// CS0019.cs
public class MyClass
{
[System.Diagnostics.ConditionalAttribute("DEBUG" || "TRACE")] // CS0019
// try the following line instead
// [System.Diagnostics.ConditionalAttribute("DEBUG")]
public void TestMethod()
{
C#从入门到精通
4
}
public static void Main()
{
}
}
在本例中,必须在 ConditionalAttribute 外指定条件逻辑。只能向 ConditionalAttribute 传递一个预定义符号。
7. 编译器错误 CS0020
?? 错误信息
被常数零除。
?? 解决方案
表达式在除法运算的分母中使用了字面(不是变量)值零。未定义被零除,因此无效。
8. 编译器错误 CS0021
?? 错误信息
无法将带 [] 的索引应用于“type”类型的表达式。
?? 解决方案
试图通过索引器访问不支持 索引器(C# 编程指南) 的数据类型的值。
当您试图在 C++ 程序集中使用索引器时,可能会遇到 CS0021。在这种情况下,请用DefaultMember 属性修饰 C++ 类,以使 C# 编译器知道哪个索引器是默认的。下面的示例生成 CS0021。
此文件编译成一个 .dll 文件(DefaultMember 属性被注释掉)以生成此错误。
// CPP0021.cpp
// compile with: /clr /LD
using namespace System::Reflection;
// Uncomment the following line to resolve
//[DefaultMember("myItem")]
public ref class MyClassMC
{
public:
property int myItem[int]
{


5
int get(int i){ return 5; }
void set(int i, int value) {}
}
};
下面是调用此 .dll 文件的 C# 文件。此文件试图通过索引器访问该类,但由于没有成员被声明为要使用的默认索引器,所以生成错误。
// CS0021.cs
// compile with: /reference:CPP0021.dll
public class MyClass
{
public static void Main()
{
MyClassMC myMC = new MyClassMC();
int j = myMC[1]; // CS0021
}
}
9. 编译器错误 CS0022
?? 错误信息
[] 内索引数错误,应为“number”。
?? 解决方案
数组访问操作在方括号内指定的维数不正确。
10. 编译器错误 CS0026
?? 错误信息
关键字“this”在静态属性、静态方法或静态字段初始值设定项中无效。
?? 解决方案
this(C# 参考) 关键字引用的对象是类型的实例。由于静态方法不依赖于包含类的任何实例,因此“this”关键字无意义,而这是不允许的。
下面的示例生成 CS0026:
复制代码
// CS0026.cs
public class A
C#从入门到精通
6
{
public static int i = 0;
public static void Main()
{
// CS0026
this.i = this.i + 1;
// Try the following line instead:
// i = i + 1;
}
}
11. 编译器错误 CS0027
?? 错误信息
关键字“this”在当前上下文中不可用。
?? 解决方案
在属性、方法或构造函数的外部发现了 this(C# 参考) 关键字。
若要修复此错误,请修改语句以消除 this 关键字的使用,并且/或者将语句的一部分或全部移到属性、方法或构造函数的内部。
12. 编译器错误 CS0029
?? 错误信息
无法将类型“type”隐式转换为“type”。
?? 解决方案
编译器要求显式转换。例如,可能需要将右值转换成与左值相同的类型。或者必须提供转换例程以支持某些运算符重载。
在将某个类型的变量赋给其他类型的变量时必须进行转换。当在不同类型的变量之间进行赋值时,编译器必须将赋值运算符右边的类型转换为该赋值运算符左边的类型。假设有下面的代码:
int i = 50;
long lng = 100;
i = lng;
i = lng; 进行赋值运算,但赋值运算符左右两边变量的数据类型不匹配。进行赋值前,编译器将变量 lng(类型为 long)隐式转换为 int。此为隐式转换,原因是没有代码显式指示


7
编译器执行此转换。此代码的问题在于上述转换被视为收缩转换,而编译器不允许进行隐式收缩转换,原因是可能会丢失数据。
如果转换后的数据类型所占用的内存存储空间比转换前的数据类型所占用的少,则存在收缩转换。例如,将 long 类型转换为 int 类型就被视为收缩转换。long 类型占用 8 个字节的内存,而 int 类型只占用 4 个字节。若要查看数据丢失如何发生,请考虑以下示例:
int i = 50;
long lng = 3147483647;
i = lng;
变量 lng 现在包含的值无法存储在变量 i 中,原因是该值太大。如果要将该值转换为int 类型,就会丢失一些数据,并且转换后的值不同于转换前的值。
扩大转换与收缩转换相反。对于扩大转换,转换后的数据类型占用的内存存储空间比转换前的数据类型占用的多。下面是一个扩大转换的示例:
int i = 50;
long lng = 100;
lng = i;
请注意此代码示例和第一个示例之间的区别。这里,变量 lng 位于赋值运算符的左边,所以它是赋值的目标。在可以进行赋值前,编译器必须将变量 i(类型为 int)隐式转换为 long 类型,这是一个扩大转换,原因是从占用 4 个字节内存的类型 (int) 转换为占用 8 个字节内存的类型 (long)。由于不会发生数据丢失,所以允许进行隐式扩大转换。任何可以用 int 类型存储的值也可以用 long 类型存储。
我们知道隐式收缩转换是不允许的,因此为了能够编译这些代码,就需要显式转换数据类型。显式转换是使用强制转换来完成的。强制转换是 C# 中用来描述将一种数据类型转换为另一种数据类型的术语。若要编译这些代码,我们需要使用以下语法:
int i = 50;
long lng = 100;
i = (int) lng; // cast to int
第三行代码通知编译器在进行赋值前,将变量 lng(类型为 long)显式转换为 int 类型。切记,使用收缩转换可能会丢失数据。使用收缩转换时应小心,而且即使可以编译代码,也可能会在运行时获得意外的结果。
此讨论只针对值类型。使用值类型就是直接使用存储在变量中的数据。但 .NET Framework 还具有引用类型。使用引用类型就是使用对变量的引用,而不是使用实际数据。引用类型的示例是类、接口和数组。不能隐式或显式地将一个引用类型转换为其他引用类型,除非编译器允许特定的转换或可以实现相应的转换运算符。
下面的示例生成 CS0029:
C#从入门到精通
8
// CS0029.cs
public class MyInt
{
private int x = 0;
// Uncomment this conversion routine to resolve CS0029
/*
public static implicit operator int(MyInt i)
{
return i.x;
}
*/
public static void Main()
{
MyInt myInt = new MyInt();
int i = myInt; // CS0029
}
}
13. 编译器错误 CS0031
?? 错误信息
常数值“value”无法转换为“type”。
?? 解决方案
试图对类型不能存储值的变量赋值。
14. 编译器错误 CS0034
?? 错误信息
运算符“operator”对于“type1”和“type2”类型的操作数具有二义性。
?? 解决方案
运算符用在了两个对象上,并且编译器找到多个转换。转换必须是唯一的,因此需要再进行一项类型转换,或者使其中一个转换成为显式的。


9
15. 编译器错误 CS0037
?? 错误信息
无法将 NULL 转换成“type”,因为它是一个值类型。
?? 解决方案
编译器不能给值类型赋空值,只能给引用类型或可为空值的类型赋空值。而 struct 是一个值类型。
下面的示例生成 CS0037:
// CS0037.cs
public struct s
{
}
class a
{
public static void Main()
{
int i = null; // CS0037
s ss = null; // CS0037
}
}
16. 编译器错误 CS0039
?? 错误信息
无法通过内置转换将类型“type1”转换为“type2”。
?? 解决方案
继承、引用转换和装箱转换允许使用 as(C# 参考) 运算符的转换。
17. 编译器错误 CS0050
?? 错误信息
可访问性不一致:返回类型“type”比方法“method”的可访问性低。
C#从入门到精通
10
?? 解决方案
方法的返回类型和形参表中引用的每个类型都必须至少具有和方法自身相同的可访问性。
18. 编译器错误 CS0051
?? 错误信息
可访问性不一致:参数类型“type”比方法“method”的访问性低。
?? 解决方案
方法的返回类型和形参表中引用的每个类型都必须至少具有和方法自身相同的可访问性。请确保方法签名中使用的类型不会因为省略 public 修饰符而意外变为专用。
下面的示例生成 CS0051:
// CS0051.cs
public class A
{
// Try making B public since F is public
// B is implicitly private here
class B
{
}
public static void F(B b) // CS0051
{
}
public static void Main()
{
}
}
19. 编译器错误 CS0052
?? 错误信息
可访问性不一致: 字段类型“type”比字段“field”的访问性低。
?? 解决方案
字段类型的可访问性不能比字段本身的可访问性低,因为所有的公共构造都必须返回公


11
共的可访问对象。
20. 编译器错误 CS0060
?? 错误信息
可访问性不一致:基类“class1”比类“class2”的访问性低。
?? 解决方案
基类和继承类之间的类可访问性应一致。
下面的示例生成 CS0060:
// CS0060.cs
class MyClass
// try the following line instead
// public class MyClass
{
}
public class MyClass2 : MyClass // CS0060
{
public static void Main()
{
}
}
21. 编译器错误 CS0061
?? 错误信息
可访问性不一致:基接口“interface 1”比接口“interface 2”的可访问性低。
?? 解决方案
公共构造必须返回可以公开访问的对象。
在派生接口中,接口可访问性不能被限定。
22. 编译器错误 CS0068
?? 错误信息
“event”:接口中的事件不能有初始值设定项。
C#从入门到精通
12
?? 解决方案
接口中的事件不能有初始值设定项。
23. 编译器错误 CS0070
?? 错误信息
事件“event”只能出现在 += 或 -= 的左边(从类型“type”中使用时除外)。
?? 解决方案
在定义事件的类的外部,event 只能加上或减去引用。
下面的示例生成 CS0070:
// CS0070.cs
using System;
public delegate void EventHandler();
public class A
{
public event EventHandler Click;
public static void OnClick()
{
EventHandler eh;
A a = new A();
eh = a.Click;
}
public static void Main()
{
}
}
public class B
{
public int Foo ()
{
EventHandler eh = new EventHandler(A.OnClick);
A a = new A();
eh = a.Click; // CS0070
// try the following line instead
// a.Click += eh;
return 1;


13
}
}
24. 编译器错误 CS0072
?? 错误信息
“event”:无法重写;“method”不是事件。
?? 解决方案
event 只能重写另一事件。
25. 编译器错误 CS0075
?? 错误信息
若要强制转换某个负值,必须将该值放在括号内。
?? 解决方案
如果您使用标识预定义类型的关键字进行强制转换,则不需要括号。否则,必须用括号括起来,因为 (x) –y 不会被视为强制转换表达式。摘自 C# 规范的第 7.6.6 节:
从消除歧义规则可以导出下述结论:如果 x 和 y 是标识符,则 (x)y、(x)(y) 和 (x)(-y) 是强制转换表达式,但 (x)-y 不是,即使 x 标识的是类型。但是,如果 x 是一个标识预定义类型(如 int)的关键字,则所有这四种形式均为强制转换表达式(因为这种关键字本身不可能是表达式)。
26. 编译器错误 CS0076
?? 错误信息
枚举名“value__”是保留字,无法使用。
?? 解决方案
枚举中的项不能有称为 value__ 的标识符。
27. 编译器错误 CS0081
?? 错误信息
类型参数声明必须是标识符而不是类型。
C#从入门到精通
14
?? 解决方案
当您声明泛型方法或类型时,请将类型参数指定为标识符,例如“T”或“inputType”。客户端代码在调用方法时会提供类型,以替换方法体或类体中标识符的每个匹配项。
28. 编译器错误 CS0100
?? 错误信息
参数名“parameter name”重复。
?? 解决方案
方法声明多次使用了同一个参数名。参数名在方法声明中必须唯一。
下面的示例生成 CS0100:
// CS0100.cs
namespace x
{
public class a
{
public static void f(int i, char i) // CS0100
// try the following line instead
// public static void f(int i, char j)
{
}
public static void Main()
{
}
}
}
29. 编译器错误 CS0106
?? 错误信息
修饰符“modifier”对该项无效。
?? 解决方案
类或接口成员是用无效的访问修饰符标记的。下列示例描述了一些无效的修饰符:
在接口方法上不允许使用 static 和 public 修饰符。


15
在显式接口声明上不允许使用 public 关键字。在这种情况下,请从显式接口声明中移除 public 关键字。
在显式接口声明上不允许使用 abstract 关键字,因为显式接口实现永远不能被重写。
在以前的 Visual Studio 版本中,不允许在类上使用 static 修饰符,但允许 static 类以Microsoft Visual Studio 2005 开头。
30. 编译器错误 CS0111
?? 错误信息
类型“class”已经定义了一个具有相同参数类型的名为“member”的成员。
?? 解决方案
如果一个类包含两个具有相同名称和参数类型的成员声明,则会发生 CS0111。
31. 编译器错误 CS0115
?? 错误信息
“function”:没有找到适合的方法来重写。
?? 解决方案
方法被标记为 override,但编译器未找到可重写的方法。
下面的示例生成 CS0115。可以用下列两种方法之一解决 CS0115:
从 MyClass2 的方法中移除 override 关键字。
将 MyClass1 用作 MyClass2 的基类。
// CS0115.cs
namespace MyNamespace
{
abstract public class MyClass1
{
public abstract int f();
}
abstract public class MyClass2
{
public override int f() // CS0115
{
return 0;
}
C#从入门到精通
16
public static void Main()
{
}
}
}
32. 编译器错误 CS0117
?? 错误信息
type”不包含“identifier”的定义。
?? 解决方案
当引用的成员对于此数据类型不存在时,将出现此错误。
几种常见的情况可产生此错误:
调用的方法不存在。
使用的 Item 属性后面跟有索引器。
当一个类的名称和它的封闭命名空间名称相同时,调用限定方法。
调用的接口是用支持接口内部的静态成员的语言编写的。
33. 编译器错误 CS0120
?? 错误信息
非静态的字段、方法或属性“member”要求对象引用。
?? 解决方案
必须首先创建对象实例,才能使用非静态的字段、方法或属性。
下面的示例生成 CS0120:
// CS0120_1.cs
public class MyClass
{
// Non-static field
public int i;
// Non-static method
public void f(){}
// Non-static property
int Prop
{


17
get
{
return 1;
}
}
public static void Main()
{
i = 10; // CS0120
f(); // CS0120
int p = Prop; // CS0120
// try the following lines instead
// MyClass mc = new MyClass();
// mc.i = 10;
// mc.f();
// int p = mc.Prop;
}
}
如果从静态方法调用非静态方法,也会生成 CS0120,如下所示:
// CS0120_2.cs
// CS0120 expected
using System;
public class MyClass
{
public static void Main()
{
TestCall(); // CS0120
// To call a non-static method from Main,
// first create an instance of the class.
// Use the following two lines instead:
// MyClass anInstanceofMyClass = new MyClass();
// anInstanceofMyClass.TestCall();
}
public void TestCall()
{
}
}
C#从入门到精通
18
同样,静态方法不能调用实例方法,除非显式给它提供了类的实例,如下所示:
// CS0120_3.cs
using System;
public class MyClass
{
public static void Main()
{
do_it("Hello There"); // CS0120
}
private void do_it(string sText)
// You could also add the keyword static to the method definition:
// private static void do_it(string sText)
{
Console.WriteLine(sText);
}
}
34. 编译器错误 CS0127
?? 错误信息
由于“function”返回 void,返回关键字后面不得有对象表达式。
?? 解决方案
具有 void 返回类型的方法无法返回值。
下面的示例生成 CS0127:
// CS0127.cs
namespace MyNamespace
{
public class MyClass
{
public int hiddenMember2
{
get
{
return 0;
}
set // CS0127, set has an implicit void return type


19
{
return 0; // remove return statement to resolve this CS0127
}
}
public static void Main()
{
}
}
}
35. 编译器错误 CS0133
?? 错误信息
指派给“variable”的表达式必须是常数。
?? 解决方案
const 变量不能采用非常数的表达式作为它的值。下面的示例生成 CS0133:
// CS0133.cs
public class MyClass
{
public const int i = c; // CS0133, c is not constant
public static int c = i;
// try the following line instead
// public const int i = 6;
public static void Main()
{
}
}
36. 编译器错误 CS0138
?? 错误信息
using 命名空间指令只能应用于命名空间;“type”是一个类型,而不是命名空间。
?? 解决方案
using 指令只能将命名空间的名称用作参数。
C#从入门到精通
20
37. 编译器错误 CS0144
?? 错误信息
无法创建抽象类或接口“interface”的实例。
?? 解决方案
不能创建 abstract 类或 interface 的实例。
38. 编译器错误 CS0150
?? 错误信息
应输入常数值。
?? 解决方案
在需要常数的地方发现了变量。
39. 编译器错误 CS0156
?? 错误信息
无参数的 throw 语句不允许在 catch 子句之外使用。
?? 解决方案
不带参数的 throw 语句只能出现在不带参数的 catch 子句中。
有关更多信息,请参见异常处理语句和异常和异常处理(C# 编程指南)。
下面的示例生成 CS0156:
// CS0156.cs
using System;
namespace MyNamespace
{
public class MyClass2 : Exception
{
}
public class MyClass
{
public static void Main()
{


21
try
{
throw; // CS0156
}
catch(MyClass2)
{
throw; // this throw is valid
}
}
}
}
40. 编译器错误 CS0160
?? 错误信息
前一个 catch 子句已经捕获该类型或超类型(“type”)的所有异常。
?? 解决方案
一系列 catch 语句需要按派生的递减顺序排列。例如,派生程度最高的对象必须首先出现。
41. 编译器错误 CS0174
?? 错误信息
“base”引用需要基类。
?? 解决方案
该错误仅在 .NET Framework 公共语言运行库编译 System.Object 类(它是唯一没有基类的类)的源代码时才发生。
42. 编译器错误 CS0186
?? 错误信息
在此上下文中使用 NULL 无效。
C#从入门到精通
22
?? 解决方案
方法被标记为 override,但编译器未找到可重写的方法
下面的示例生成 CS0186:
// CS0186.cs
using System;
using System.Collections;
class MyClass
{
static void Main()
{
// Each of the following lines generates CS0186:
foreach (int i in null) {} // CS0186
foreach (int i in (IEnumerable) null) { }; // CS0186
}
}
43. 编译器错误 CS0198
?? 错误信息
无法对静态只读字段赋值(静态构造函数或变量初始值设定项中除外)。
?? 解决方案
readonly 变量与要在其中初始化它的构造函数必须具有相同的 static 用法。
下面的示例生成 CS0198:
// CS0198.cs
class MyClass
{
public static readonly int TestInt = 6;
MyClass()
{
TestInt = 11; // CS0198, constructor is not static and readonly field is
}
public static void Main()
{
}
}


23
44. 编译器错误 CS0211
?? 错误信息
无法获取给定表达式的地址。
?? 解决方案
可以获取字段、局部变量和指针间接寻址的地址,但不能获取诸如两个局部变量之和的地址。
45. 编译器错误 CS0225
?? 错误信息
params 参数必须是一维数组。
?? 解决方案
当使用 params 关键字时,必须指定该数据类型的一维数组。
46. 编译器错误 CS0229
?? 错误信息
“member1”和“member2”之间具有二义性。
?? 解决方案
不同接口的成员具有相同的名称。如果要保留相同的名称,则必须限定这些名称。
47. 编译器错误 CS0233
?? 错误信息
“identifier”没有预定义大小,因此 sizeof 只能用于不安全的上下文中(请考虑使用System.Runtime.InteropServices.Marshal.SizeOf)。
?? 解决方案
sizeof 运算符只能用于为编译时常数的类型。如果您遇到此错误,请确保在编译时可以确定标识符的大小。如果不能确定,则用 SizeOf 代替 sizeof。
C#从入门到精通
24
48. 编译器错误 CS0234
?? 错误信息
命名空间“namespace”中不存在类型或命名空间名称“name”(是否缺少程序集引用?)。
?? 解决方案
应为某个类型。可能的原因包括:
在编译中未引用包含某个类型定义的程序集。请使用/reference(导入元数据)指定程序集。
将某个变量名传递给了 typeof 运算符。
有关如何在开发环境中添加引用的信息,请参见“添加引用”对话框。
下面的示例生成 CS0234:
// CS0234.cs
public class C
{
public static void Main()
{
System.DateTime x = new System.DateTim(); // CS0234
// try the following line instead
// System.DateTime x = new System.DateTime();
}
}
49. 编译器错误 CS0241
?? 错误信息
不允许有默认参数说明符。
?? 解决方案
方法参数不能有默认值。如果要获得同样的效果,请使用方法重载。
下面的示例生成 CS0241。此外,该示例还演示如何使用重载模拟具有默认参数的方法。
// CS0241.cs
public class A
{
public void Test(int i = 9) {} // CS0241
}


25
public class B
{
public void Test() { Test(9); }
public void Test(int i) {}
}
public class C
{
public static void Main()
{
B x = new B();
x.Test();
}
}
50. 编译器错误 CS0242
?? 错误信息
相关操作在 void 指针上未定义。
?? 解决方案
不允许增加 void 指针。
下面的示例生成 CS0242:
// CS0242.cs
// compile with: /unsafe
class TestClass
{
public unsafe void Test()
{
void * p = null;
p++; // CS0242, incrementing a void pointer not allowed
}
public static void Main()
{
}
}
C#从入门到精通
26
51. 编译器错误 CS0246
?? 错误信息
找不到类型或命名空间名称“type/namespace”(是否缺少 using 指令或程序集引用?)。
?? 解决方案
未找到类型。可能忘了引用 (/reference) 包含该类型的程序集,或者可能未用 using 指令正确地限定其用法。
出现此错误的几个原因是:
试图使用的类型名称或命名空间名称可能拼写错误(包括正确的大小写)。没有正确的名称,编译器就无法找到在代码中引用的类型或命名空间的定义。这种情况最常发生,原因是 C# 区分大小写,而在引用类型时没有使用正确的大小写。例如,Dataset ds; 会生成CS0246;请注意,Dataset 中的 s 没有大写。
如果错误的原因在于命名空间名称,则可能是没有引用 (/reference) 包含该命名空间的程序集。例如,代码可能包含 using Accessibility;。但是,如果项目不引用程序集Accessibility.dll,则会遇到 CS0246。有关如何在开发环境中添加引用的信息,请参见“添加引用”对话框。
如果错误的原因在于类型名称,则可能是没有使用正确的 using 指令,或没有完全限定该类型的名称。考虑下面的代码行:DataSet ds;。为了能够使用 DataSet 类型,您需要做以下两件事。第一,需要一个对包含 DataSet 类型定义的程序集的引用。第二,需要对 DataSet 所在的命名空间使用 using 指令。例如,由于 DataSet 位于 System.Data 命名空间中,所以需要在代码的开头有以下语句:using System.Data;。
第二步不是必需的。但如果省略这一步,则要求在引用 DataSet 类型时对它进行完全限定。完全限定 DataSet 类型意味着每次在代码中引用它时都要使用命名空间和类型。所以,如果决定跳过第二步,您需要将上述声明代码更改为:System.Data.DataSet ds;。
如果是非类型的错误,说明您可能在需要类型时使用了变量或其他对象。例如,在 is 语句中,如果您使用 Type 对象而不是实际的类型,将会遇到此错误。
52. 编译器错误 CS0264
?? 错误信息
“type”的分部声明必须具有相同顺序的相同类型参数名。
?? 解决方案
如果您要在分部声明中定义一个泛型类型,但类型参数的名称或顺序在所有分部声明中不一致,就会发生此错误。若要消除此错误,请检查每个分部声明的类型参数,确保使用的参数名称和顺序相同。


27
53. 编译器错误 CS0270
?? 错误信息
不能在变量声明中指定数组大小(请尝试使用“new”表达式初始化)。
?? 解决方案
将大小指定为数组声明的一部分时会发生此错误。若要解决此错误,请使用 new 运算符表达式。
54. 编译器错误 CS0283
?? 错误信息
不能将类型“type”声明为 const。
?? 解决方案
常数声明中指定的类型必须是 byte、char、short、int、long、float、double、decimal、bool、string、枚举类型或引用类型。每个常数表达式产生的值必须属于目标类型,或者属于可隐式转换为目标类型的类型。
55. 编译器错误 CS0115
?? 错误信息
“function”:没有找到适合的方法来重写。
?? 解决方案
方法被标记为 override,但编译器未找到可重写的方法。
56. 编译器错误 CS0304
?? 错误信息
变量类型“type”没有 new() 约束,无法创建它的实例。
?? 解决方案
当您使用 new 创建某个类型变量的实例时,如果该类型变量未指定 new() constraint,则会发生此错误。除非使用 new() 约束确保存在默认的构造函数,否则不能使用 new 直接调用未知类型的构造函数。如果无法使用 new 约束,可考虑使用 typeof 表达式访问所需的
C#从入门到精通
28
构造函数。
下面的示例生成 CS0304:
// CS0304.cs
class C<T>
{
T t = new T(); // CS0304
}
类方法中同样不允许这种形式的 new 语句:
// CS0304-2.cs
class C<T>
{
public void f()
{
T t = new T(); // CS0304
}
}
57. 编译器错误 CS0309
?? 错误信息
类型“typename”必须可以转换为“constraint type”才能用作泛型类型或方法“generic”中的参数“parameter”。
?? 解决方案
使用泛型类或方法时,必须遵守使用 where 关键字对泛型类型施加的约束。违反约束将导致此错误。要修复此错误,应将另一类型传递到泛型类或方法中,或应更改这些约束。
58. 编译器错误 CS0409
?? 错误信息
已经为类型参数“type parameter”指定了约束子句。类型参数的所有约束必须在单个where 子句中指定。
?? 解决方案
已找到单个类型参数的多个约束子句(where 子句)。移除无关的 where 子句,或对where 子句进行更正,以便每个子句中有一个唯一的类型参数。


29
// CS0409.cs
interface I
{
}
class C<T1, T2> where T1 : I where T1 : I // CS0409 – T1 used twice
{
}
59. 编译器错误 CS0416
?? 错误信息
“type parameter”:属性参数不能使用类型参数。
?? 解决方案
类型参数被用作属性参数,这是不允许的。请使用非泛型类型。
下面的示例生成 CS0416:
// CS0416.cs
public class MyAttribute : System.Attribute
{
public MyAttribute(System.Type t)
{
}
}
class G<T>
{
[MyAttribute(typeof(G<T>))] // CS0416
public void F()
{
}
}
60. 编译器错误 CS0426
?? 错误信息
语法错误,需要值。
C#从入门到精通
30
?? 解决方案
未能在指定的类型中找到类型名称。检查所使用的名称的拼写,并验证引用的类型是否具有预期的成员。
61. 编译器错误 CS0443
?? 错误信息
“function”:没有找到适合的方法来重写。
?? 解决方案
如果您在引用数组时未指定数组索引的值,将发生此错误。
下面的代码生成 CS0443。
// CS0443.cs
using System;
class MyClass
{
public static void Main()
{
int[,] x = new int[1,5];
if (x[] == 5) {} // CS0443
// if (x[0, 0] == 5) {}
}
}
62. 编译器错误 CS0457
?? 错误信息
当从“type name 1”转换为“type name 2”时,用户定义的转换“Conversion method name 1”和“Conversion method name 2”不明确。。
?? 解决方案
有两个转换方法可以使用,编译器无法确定使用哪一个。
可能导致此错误的一种情况如下:
您想从类 A 转换到类 B,其中 A 和 B 不相关。
A 从 A0 派生,有一个从 A0 转换到 B 的方法。
B 有一个子类 B1,有一个从 A 转换到 B1 的方法。


31
编译器将认为这两个转换方法是等价的,因为第一个转换方法提供了最好的目标类型,而第二个转换方法提供了最好的源类型。因为编译器无法选择,所以将生成此错误。要解决此问题,请编写一个从 A 转换到 B 的新的显式方法。
另一个导致此错误的情况是有两个从 A 转换到 B 的方法。要修复此错误,请指定显式的强制转换。
63. 编译器错误 CS0462
?? 错误信息
继承的成员“member1”和“member2”在类型“type”中有相同的签名,所以不能被重写。
?? 解决方案
此错误是由于引入泛型而引起的。正常情况下,类中的方法不能有两个具有相同签名的版本。但是对于泛型,如果泛型方法使用某个特定的类型实例化,则可以指定一个可能与另一个方法重复的泛型方法。
64. 编译器错误 CS0506
?? 错误信息
“function1”:无法重写继承成员“function2”,因为它未标记为“virtual”、“abstract”或“override”。
?? 解决方案
将未显式标记为 virtual、abstract 或 override 的方法进行了重写。
65. 编译器错误 CS0522
?? 错误信息
“constructor”:结构无法调用基类构造函数。
?? 解决方案
struct 不能调用基类构造函数;请移除对基类构造函数的调用。
C#从入门到精通
32
66. 编译器错误 CS0535
?? 错误信息
“class”不会实现接口成员“member”。
?? 解决方案
class 从 interface 派生,但该类未实现该接口的一个或多个成员。类必须实现它从中派生的接口的所有成员,否则必须声明为 abstract。
下面的示例生成 CS0535。
// CS0535.cs
public interface A
{
void F();
}
public class B : A {} // CS0535 A::F is not implemented
// OK
public class C : A {
public void F() {}
public static void Main() {}
}
下面的示例生成 CS0535。
// CS0535_b.cs
using System;
class C : IDisposable {} // CS0535
// OK
class D : IDisposable {
void IDisposable.Dispose() {}
public void Dispose() {}
static void Main() {
using (D d = new D()) {}
}
}


33
67. 编译器错误 CS0558
?? 错误信息
用户定义的运算符“operator”必须声明为 static 和 public。
?? 解决方案
static 和 public 访问修饰符必须在用户定义的运算符上指定。
68. 编译器错误 CS0574
?? 错误信息
析构函数的名称必须与类的名称匹配。
?? 解决方案
析构函数的名称必须是带代字号 (~) 前缀的类名称。
69. 编译器错误 CS0590
?? 错误信息
用户定义的运算符不能返回 void
?? 解决方案
用户定义的运算符旨在返回对象。
下面的示例生成 CS0590:
// CS0590.cs
namespace x
{
public class a
{
public static void operator+(a A1, a A2) // CS0590
{
}
// try the following user-defined operator
/*
public static a operator+(a A1, a A2)
{
C#从入门到精通
34
return A2;
}
*/
public static int Main()
{
return 1;
}
}
}
70. 编译器错误 CS0622
?? 错误信息
只能使用数组初始值设定项表达式为数组类型赋值。请尝试改用新的表达式。
?? 解决方案
在非数组的声明中使用了适合于初始化数组的语法。
71. 编译器错误 CS0644
?? 错误信息
“class1”不能从特殊类“class2”继承。
?? 解决方案
类不能从下列任何基类中显式继承:
System.Enum
System.ValueType
System.Delegate
System.Array
这些基类被编译器用作隐式基类。例如,System.ValueType 是结构的隐式基类。
下面的示例生成 CS0644:
// CS0644.cs
class MyClass : System.ValueType // CS0644
{
}


35
72. 编译器错误 CS0653
?? 错误信息
无法应用属性类“class”,因为它是抽象的。
?? 解决方案
abstract 自定义属性类不能用作属性。
73. 编译器错误 CS0673
?? 错误信息
在 C# 中无法使用 System.Void - 使用 typeof(void) 获取 void 类型对象。
?? 解决方案
System.Void 不能用在 C# 中。
下面的示例生成 CS0673:
// CS0673.cs
class MyClass
{
public static void Main()
{
System.Type t = typeof(System.Void); // CS0673
// try the following line instead
// System.Type t = typeof(void);
}
}
74. 编译器错误 CS0690
?? 错误信息
输入文件“file”包含无效的元数据。
?? 解决方案
可以打开元数据文件,但由于某种本地化的问题,元数据已损坏。这与错误CS0009 相似,只是此时您能够打开元数据文件。
PE (Process Executable) 是一个可执行文件。
C#从入门到精通
36
75. 编译器错误 CS0710
?? 错误信息
静态类不能有实例构造函数。
?? 解决方案
静态类无法实例化,因此它不需要构造函数。若要避免此错误,请从静态类中移除所有构造函数,或者如果您确实希望构造实例,请将类设为非静态类。
下面的示例生成 CS0710:
// CS0710.cs
public static class C
{
public C() // CS0710
{
}
public static void Main()
{
}
}
76. 编译器错误CS0716
?? 错误信息
无法转换为静态类型“type”。
?? 解决方案
如果您的代码使用强制转换来转换为静态类型,则会发生此错误。由于一个对象不可能成为静态类型的实例,因此强制转换为静态类型永远没有意义。
77. 编译器错误 CS0734
?? 错误信息
仅在生成“module”的目标类型时才可以指定 /moduleassemblyname 选项。
?? 解决方案
仅在生成 .netmodule 时才可以使用编译器选项 /moduleassemblyname。


37
下面的示例生成 CS0734。若要解决此问题,请将 /target:module 添加到编译中。
// CS0734.cs
// compile with: /moduleassemblyname:A
// CS0734 expected
public class Test {}
78. 编译器错误 CS1003
?? 错误信息
语法错误,应输入“char”。
?? 解决方案
编译器将因若干错误条件中的任何一个而生成该错误。请查看您的代码以找到语法错误。
下面的示例生成 CS1003:
// CS1003.cs
public class b
{
public static void Main()
{
int[] a;
a[); // CS1003
}
}
79. 编译器错误 CS1017
?? 错误信息
Try 语句已经有了空的 catch 块。
?? 解决方案
一个不带任何参数的 catch 块必须是一系列 catch 块的最后一项。
C#从入门到精通
38
80. 编译器错误 CS1025
?? 错误信息
应输入单行注释或行尾。
?? 解决方案
带有预处理器指令的行不能有多行注释。
下面的示例生成 CS1025:
#if true /* hello
*/ // CS1025
#endif // this is a good comment
如果尝试使用某些无效的预处理器指令,则也可能发生 CS1025,如下所示:
复制代码
// CS1025.cs
#define a
class Sample
{
static void Main()
{
#if a 1 // CS1025, invalid syntax
System.Console.WriteLine("Hello, World!");
#endif
}
}
81. 编译器错误 CS1039
?? 错误信息
字符串未终止。
?? 解决方案
编译器检测到格式错误的 string。
下面的示例生成 CS1039。若要纠正该错误,请添加终止引号。
// CS1039.cs
public class MyClass


39
{
public static void Main()
{
string b = @"hello, world; // CS1039
}
}
82. 编译器错误 CS1513
?? 错误信息
应输入 }。
?? 解决方案
编译器要求输入缺失的右大括号 (})。
下面的示例生成 CS1513:
// CS1513
namespace y // CS1513, no close curly brace
{
class x
{
public static void Main()
{
}
}
83. 编译器错误 CS1520
?? 错误信息
类、结构或接口方法必须有返回类型。
?? 解决方案
在类、结构或接口中声明的方法必须具有显式返回类型。
下面的示例生成 CS1520:
// CS1520a.cs
public class x
{
f7() // CS1520, needs return type
C#从入门到精通
40
// try the following definition
// void f7()
{
}
public static void Main()
{
}
}
另外,当构造函数名称的大小写与类或结构声明的不同时,也可能会遇到该错误,如以下示例所示:
// CS1520b.cs
public class Class1
{
public class1() // CS1520, incorrect case
{
}
static void Main()
{
}
}
84. 编译器错误 CS1536
?? 错误信息
参数类型 void 无效。
?? 解决方案
指定 void 指针以外的 void 参数没有必要或者是无效的。
下面的示例生成 CS1536:
// CS1536.cs
class a
{
public static int x( void ) // CS1536
// try the following line instead
// public static int x()
{
return 0;


41
}
public static void Main()
{
}
}
85. 编译器错误 CS1548
?? 错误信息
对程序集“assembly”签名时加密失败 —“reason”。
?? 解决方案
程序集签名失败时将发生 CS1548。这通常是由于无效的密钥文件名称、无效的密钥文件路径或已损坏的密钥文件而造成的。
若要对程序集进行完全签名,必须提供一个包含有关公钥和私钥信息的有效密钥文件。若要延迟为程序集签名,必须选中“仅延迟签名”复选框并提供一个包含有关公钥信息的有效密钥文件。为程序集延迟签名时不需要提供私钥。
有关更多信息,请参见如何:对程序集进行签名 (Visual Studio)、/keyfile(指定强名称密钥文件)(C# 编译器选项)和/delaysign(延迟为程序集签名)(C# 编译器选项)。
创建程序集时,C# 编译器会调入一个称为“al.exe”的实用工具。如果在创建程序集时出现失败,al.exe 会报告失败的原因。请参见 Al.exe 工具错误和警告并在该主题中搜索编译器在“原因”中报告的文本。
86. 编译器错误 CS1552
?? 错误信息
数组类型说明符 [] 必须出现在参数名之前。
?? 解决方案
数组类型说明符在数组声明中的位置是在变量名之后。
下面的示例生成 CS1552:
// CS1552.cs
public class C
{
public static void Main(string args[]) // CS1552
// try the following line instead
// public static void Main(string [] args)
C#从入门到精通
42
{
}
}
87. 编译器错误 CS1558
?? 错误信息
“class”没有合适的静态 Main 方法。
?? 解决方案
/main 编译器选项指定了一个在其中查找 Main 方法的类。但是,Main 方法未正确定义。
由于返回类型无效,下面的示例生成 CS1558。
// CS1558.cs
// compile with: /main:MyNamespace.MyClass
namespace MyNamespace
{
public class MyClass
{
public static float Main()
{
return 0.0; // CS1558 because the return type is a float.
}
}
}
88. 编译器错误 CS1561
?? 错误信息
输出的文件名太长或无效。
?? 解决方案
输出文件名的长度不能超过 256 个字符,并且不得包含无效的字符,例如欧元符号、问号,或反斜杠及其他。


43
89. 编译器错误 CS1578
?? 错误信息
应输入文件名、单行注释或行尾。
?? 解决方案
在 #line 指令后只能有一个文件名(在双引号中)或单行注释。
下面的示例生成 CS1578:
// CS1578.cs
class MyClass
{
static void Main()
{
#line 101 abc.cs // CS1578
// try the following line instead
//#line 101 "abc.cs"
intt i; // error will be reported on line 101
}
}
90. 编译器错误 CS1579
?? 错误信息
foreach 语句不能对“type1”类型的变量进行操作,因为“type2”不包含“identifier”的公共定义。
?? 解决方案
若要使用 foreach 语句循环访问某个集合,该集合必须满足以下要求:
它必须是一个接口、类或结构。
它必须包含一个返回类型的公共 GetEnumerator 方法。
返回类型必须包含一个名为 Current 的公共属性和一个名为 MoveNext 的公共方法。
有关更多信息,请参见如何:使用 foreach 访问集合类(C# 编程指南)。
C#从入门到精通
44
91. 编译器错误 CS1586
?? 错误信息
数组创建必须有数组大小或数组初始值设定项。
?? 解决方案
数组未正确声明。
下面的示例生成 CS1586:
// CS1586.cs
using System;
class MyClass
{
public static void Main()
{
int[] a = new int[]; // CS1586
// try the following line instead
int[] b = new int[5];
}
}
92. 编译器错误 CS1604
?? 错误信息
无法给“variable”赋值,因为它是只读的。
?? 解决方案
对只读变量进行了赋值。若要避免此错误,不要在此上下文中给此变量赋值或试图修改此变量。
93. 编译器错误 CS1613
?? 错误信息
无法找到接口“interface”的托管 coclass 包装类“class”(是否缺少程序集引用?)。
?? 解决方案
试图从接口实例化 COM 对象。该接口具有 ComImport 和 CoClass 属性,但编译器无


45
法找到为 CoClass 属性提供的类型。
若要解决此错误,可以尝试使用下列方法之一:
向具有该 coclass 的程序集添加引用(多数情况下,该接口和该 coclass 应该在同一程序集中)。有关信息,请参见 /reference 或“添加引用”对话框。
修复该接口上的 CoClass 属性。
下面的示例演示了 CoClassAttribute 的正确用法:
// CS1613.cs
using System;
using System.Runtime.InteropServices;
[Guid("1FFD7840-E82D-4268-875C-80A160C23296")]
[ComImport()]
[CoClass(typeof(A))]
public interface IA{}
public class A : IA {}
public class AA
{
public static void Main()
{
IA i;
i = new IA(); // This is equivalent to new A().
// because of the CoClass attribute on IA
}
}
94. 编译器错误 CS1620
?? 错误信息
参数“number”必须与关键字“keyword”一起传递。
?? 解决方案
如果您要将参数传递给带有 ref 或 out 参数的函数,但您在调用时没有包括 ref 或 out 关键字,或者包括了错误的关键字,就会发生此错误。错误文本中指出了应使用的正确关键字以及导致失败的参数。
下面的示例生成 CS1620:
// CS1620.cs
class C
{
C#从入门到精通
46
void f(ref int i) {}
public static void Main()
{
int x = 1;
f(out x); // CS1620 – f takes a ref parameter, not an out parameter
// Try this line instead:
// f(ref x);
}
}
95. 编译器错误 CS1625
?? 错误信息
无法在 finally 子句体内生成。
?? 解决方案
在 finally 子句体内不允许出现 yield 语句。若要避免此错误,请将 yield 语句移到finally 子句的外部。
96. 编译器错误 CS1629
?? 错误信息
迭代器中不能出现不安全的代码。
?? 解决方案
C# 语言规范不允许迭代器中出现不安全的代码。
下面的示例生成 CS1629:
// CS1629.cs
// compile with: /unsafe
using System.Collections.Generic;
class C
{
IEnumerator<int> IteratorMeth() {
int i;
unsafe // CS1629
{
int *p = &i;


47
yield return *p;
}
}
}
97. 编译器错误 CS1637
?? 错误信息
迭代器不能有不安全的参数或 yield 类型。
?? 解决方案
检查迭代器的参数列表和任何 yield 语句的类型以验证您没有使用任何不安全的类型。
98. 编译器错误 CS1640
?? 错误信息
foreach 语句不能对“type”类型的变量进行操作,因为它实现“interface”的多个实例化,请尝试强制转换为特定的接口实例化。
?? 解决方案
此类型从 IEnumerator<T> 的两个或更多的实例继承,这意味着此类型不存在 foreach 可以使用的唯一枚举。指定 IEnumerator<T> 的类型,或使用其他循环构造。
下面的示例生成 CS1640:
// CS1640.cs
using System;
using System.Collections;
using System.Collections.Generic;
public class C : IEnumerable, IEnumerable<int>, IEnumerable<string>
{
IEnumerator<int> IEnumerable<int>.GetEnumerator()
{
yield break;
}
IEnumerator<string> IEnumerable<string>.GetEnumerator()
{
yield break;
}
C#从入门到精通
48
IEnumerator IEnumerable.GetEnumerator()
{
return (IEnumerator)((IEnumerable<string>)this).GetEnumerator();
}
}
public class Test
{
public static int Main()
{
foreach (int i in new C()){} // CS1640
// Try specifing the type of IEnumerable<T>
// foreach (int i in (IEnumerable<int>)new C()){}
return 1;
}
}
99. 编译器错误 CS1646
?? 错误信息
关键字、标识符或字符串应位于逐字说明符 @ 之后。
?? 解决方案
请参见逐字说明符“@”用法的字符串文本。逐字说明符只允许在字符串、关键字或标识符之前使用。若要解决此错误,请从任何不适当的位置移除 @ 符,或者添加所需要的字符串、关键字或标识符。
100. 编译器错误 CS1654
?? 错误信息
无法修改“variable”的成员,因为它是一个“read-only variable type”。
?? 解决方案
当您试图修改一个只读变量的成员时发生此错误,因为它在特殊的结构中。


49
101. 编译器错误 CS1660
?? 错误信息
无法将匿名方法块转换为类型“type”,因为它不是一个委托类型。
?? 解决方案
如果您尝试将匿名方法块分配给或以其他方式转换为不是委托类型的类型,就会发生此错误。
下面的示例生成 CS1660:
// CS1660.cs
delegate int MyDelegate();
class C {
static void Main()
{
int i = delegate { return 1; }; // CS1660
// Try this instead:
// MyDelegate myDelegate = delegate { return 1; };
// int i = myDelegate();
}
}
102. 编译器错误 CS1665
?? 错误信息
固定大小的缓冲区的长度必须大于零。
?? 解决方案
如果固定大小的缓冲区的大小被声明为零或负值,则发生此错误。固定大小的缓冲区的长度必须是正整数。
103. 编译器错误 CS1674
?? 错误信息
“T”:using 语句中使用的类型必须可以隐式转换为“System.IDisposable”。
C#从入门到精通
50
?? 解决方案
方法被标记为 override,但编译器未找到可重写的方法
104. 编译器错误 CS1676
?? 错误信息
参数“number”必须用“keyword”关键字声明。
?? 解决方案
当匿名方法中的参数类型修饰符与您要将该方法强制转换为的委托的声明中使用的修饰符不同时,会出现此错误。
下面的示例生成 CS1676:
// CS1676.cs
delegate void E(ref int i);
class Errors
{
static void Main()
{
E e = delegate(out int i) { }; // CS1676
// To resolve, use the following line instead:
// E e = delegate(ref int i) { };
}
}
105. 编译器错误 CS1681
?? 错误信息
不能重新定义全局外部别名。
?? 解决方案
局别名已被定义为包括所有的非别名引用,因此不能重新定义。
下面的示例生成 CS1681。
// CS1681.cs
// compile with: /reference:global=System.dll
// CS1681 expected
// try this instead: /reference:System.dll


51
class A
{
static void Main() {}
}
106. 编译器错误 CS1689
?? 错误信息
属性“Attribute Name”仅对方法或属性类有效。
?? 解决方案
只有 ConditionalAttribute 属性会出现此错误。正如错误信息中所指出的,此属性只能在方法或属性类上使用。例如,试图将此属性应用于类会产生此错误。
107. 编译器错误 CS1706
?? 错误信息
表达式不能包含匿名方法
不能在表达式内插入匿名方法。
?? 解决方案
在表达式中使用规则 delegate。
下面的示例生成 CS1706。
// CS1706.cs
using System;
delegate void MyDelegate();
class MyAttribute : Attribute
{
public MyAttribute(MyDelegate d) { }
}
// Anonymous Method in Attribute declaration is not allowed.
[MyAttribute(delegate{/* anonymous Method in Attribute declaration */})] // CS1706
class Program
{
}
C#从入门到精通
52
108. 编译器错误 CS1716
?? 错误信息
不要使用“System.Runtime.CompilerServices.FixedBuffer”属性。请改用“fixed”字段修饰符。
?? 解决方案
在包含与字段声明相似的固定大小的数组声明的不安全代码段中,会发生此错误。不要使用此属性。请改用关键字 fixed。
109. 编译器错误 CS1722
?? 错误信息
基类“class”必须在任何接口之前。
?? 解决方案
指定从中继承的类和要实现的接口时,必须首先指定类名。
下面的示例生成 CS1722。
// CS1722.cs
// compile with: /target:library
public class A {}
interface I {}
public class MyClass : I, A {} // CS1722
public class MyClass2 : A, I {} // OK
110. 编译器错误 CS1906
?? 错误信息
无效的开关“option”;资源可见性必须为“public”或“private”。
?? 解决方案
此错误指示一个无效的/resource(将资源文件嵌入到输出中) 或 /linkresource(链接到 .NET Framework 资源) 命令行选项。请检查 /resource 或 /linkresource 命令行选项的语法,确保所使用的可访问性修饰符是 public 或 private。


53
111. 编译器错误 CS2000
?? 错误信息
编译器初始化意外失败。
?? 解决方案
此错误指示初始化失败。
使用安装程序来修复或重新安装 Visual Studio 或 .NET Framework SDK。
如果错误仍然存在,请与产品支持部门联系。
112. 编译器错误 CS2003
?? 错误信息
响应文件“file”被包含多次。
?? 解决方案
响应文件多次传递给了编译器。对于每个输出文件,响应文件只能传递给编译器一次。
113. 编译器错误 CS2006
?? 错误信息
命令行语法错误:“option”开关缺少“text”。
?? 解决方案
option 的语法要求附加的文本。有关信息,请参见编译器选项。
114. 编译器错误 CS2011
?? 错误信息
无法打开响应文件“file”。
?? 解决方案
在编译中指定了响应文件,但编译器未能找到并打开该文件。
C#从入门到精通
54
115. 编译器错误 CS2015
?? 错误信息
“file”是二进制文件而不是文本文件。
?? 解决方案
传递给编译器的文件是二进制文件。而编译器需要的是源代码文件。
116. 编译器错误 CS2017
?? 错误信息
如果生成模块或库,则无法指定 /main。
?? 解决方案
当正在生成 /target:library 时不能指定 Main 入口点。
下面的示例生成 CS2017:
// CS2017.cs
// compile with: /main:MyClass /target:library
// CS2017 expected
class MyClass
{
public static void Main()
{
}
}
117. 编译器错误 CS2019
?? 错误信息
/target 的目标类型无效: 必须指定“exe”、“winexe”、“library”或“module”。
?? 解决方案
使用了 /target 编译器选项,但传递了无效参数。若要解决该错误,请使用适合输出文件的 /target 选项格式重新编译程序。
下面的示例生成 CS2017:
// CS2019.cs


55
// compile with: /target:libra
// CS2019 expected
class MyClass
{
}
118. 编译器错误 CS2020
?? 错误信息
只有第一组输入文件能生成非“模块”的目标。
?? 解决方案
在多输出编译中,第一个输出文件必须用/target:exe、/target:winexe 或 /target:library 生成。后面的任何输出文件必须用/target:module 生成。
119. 编译器错误 CS2021
?? 错误信息
文件名“file”太长或无效。
?? 解决方案
传递给 C# 编译器的所有文件名的长度都必须小于 _MAX_PATH(定义在 Windows 头文件中),该编译器将在以下情况中给出该错误:
文件名(包括路径)的长度大于 _MAX_PATH。
文件名包含无效字符。
文件名包含某些通配符,而在此处(如资源文件名中)并不允许使用通配符。
120. 编译器错误 CS2032
?? 错误信息
命令行中或响应文件中不允许有字符“character”。
?? 解决方案
csc.exe 的响应文件和命令行选项不允许包含 0-31 范围内的低 ASCII 码控制字符或者管道 (|) 字符。您通常无法从命令行中直接生成此错误,因为命令行处理器将筛选出无效的字符,这一点与集成开发环境 (IDE) 一样。您可以使用响应文件生成此错误,如下所示:
生成此错误
C#从入门到精通
56
在“我的文档”中创建一个名为 CS2032.rsp 的文件,它包含行 /target:exe /out:cs|2032.exe cs2032.cs。
创建一个名为 cs2032.cs 的文件,它包含“我的文档”中的一切。
单击“开始”,然后指向“所有程序”,指向“Microsoft Visual Studio 2005”,指向“Visual Studio 2005 工具”,然后单击“Visual Studio 命令提示”。
“Visual Studio 命令提示”窗口打开。
在“Visual Studio 命令提示”窗口中,将当前的目录更改为“我的文档”。
从“Visual Studio 命令提示”中运行以下内容:csc @cs2032.rsp出现 CS2032 错误信息。
121. 编译器错误 CS2035
?? 错误信息
命令行语法错误:“compiler_option”开关缺少“:<number>”。
?? 解决方案
有些编译器选项需要一个值。
下面的示例生成 CS2035。
// CS2035.cs
// compile with: /baseaddress
// CS2035 expected
122. 编译器错误 CS5001
?? 错误信息
程序“program”不包含适合入口点的静态“Main”方法。
?? 解决方案
在生成可执行文件的代码中没有找到 Main 方法时会发生此错误。如果用错误的大小写定义入口点函数 Main(如小写的 main ),或者没有将 Main 声明为静态的,也可能发生此错误。
下面的示例生成 CS5001。
// CS5001.cs
// CS5001 expected
public class a
{
// Uncomment the following line to resolve.
// public static void Main() {}


57
}
123. 编译器错误 CS0025
?? 错误信息
未能找到标准库文件“file”。
?? 解决方案
未找到编译器所需的文件。请检查路径是否正确以及文件是否存在。
如果文件是 Visual Studio 系统文件,您可能需要修复 Visual Studio 安装,或者完全重新安装它。
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值