跳至正文

tML模组编写常见编译错误整理

<Part0.前言-我该如何使用此页面>

编译错误(Compile Error)是在模组编写中很常见的问题。在您选择”生成”选项却显示错误代码的时候,您所面对的就是编译错误。它通常预示着您的代码在语法上出了问题。

需要注意的是,有时候您的代码可以正常生成,但是您设定的物品却无法按照您的预期工作,或是您的模组在运行的时候崩溃。上述的两种情况都不是编译错误,分别属于逻辑错误和运行时异常。在这种状况下,本页面对您几乎没有帮助,请自己查错,然后再请求群友的帮助。

言归正传,您需要这样使用本页面:

1.生成您出问题的那个mod

注:TemplateMod2本身没有问题,是我把它源码改出问题来了

2.看到产生的编译错误信息,点击”打开日志”

3.将弹出的记事本文件(通常它叫client.log)翻到最下面,找到这样一句话:”[tML]: XXX(一个文件名)编译失败,出现X(此处应该为大于零的数字)个错误与 Y(它是几都行) 警告”,向上找到” 编译完成时,出现X(此处应该与前面的X相同)个错误与 Y(应该与前面的Y相同) 警告 “,如下图标蓝的位置

不要问我怎么同时选择两个地方的,画图了解一下?

4. 您刚才找到的两个区域(上图标蓝区域)之间的部分就是编译错误的信息。他可能会有很多,多达几十个甚至上百个,但是不要紧,它们往往会连着出现,而且并不是太难修复。当您修复一个时,往往可以快速地修复接下来的很多个

5.找到编译错误信息中的第一条,查看它所对应的文件,以及在相应文件中的位置

这是我的第一条错误信息
这是发生错误的文件
这是发生错误的位置( 第8行第30列 )
这是在文件中对应的位置(只要您一行只写一句,坚持不压行的好习惯,通常只用行数就可以定位了)

6.然后复制您的编译错误的编号(为CS+一串数字),在本页面按下您的浏览器的搜索键(通常是Ctrl+F),找到它们的解决方法

这是错误编号

7.阅读提供的解决方案,按照解决方案回到出问题的文件和位置并修改您的程序

8.再次编译您的程序,若编译成功,就恭喜您;若刚才那条错误信息消失,就再次重复前面的步骤,直到您的编译成功

9.如果您的问题在这中间没有出现,或者您的问题在按照这中间的解决方案解决后仍然存在,您可以在自行思考后询问群友,并且向我反馈,将您的问题与错误代码邮箱发到2148567828@qq.com。在开学前,我会保持两天一更,开学后会尽量周更,说不定会把后续更新委托给其他人。

<Part1.常见编译错误代码及其解决方案>

#001 CS0246: The type or namespace name ‘X’ could not be found (are you missing a using directive or an assembly reference?)

当这则错误信息出现,意味着您的编译器无法找到对应的类型/命名空间。请跟随以下步骤来修补您的程序。

步骤1.找到出问题的字段,将鼠标移到它的上面并看看VS是否提供了可能的修补方案,若提供了,前往步骤2,若没有提供,前往步骤3

步骤2.使用VS提供的修补方案修补程序,再次编译运行,若该处依然存在编译错误,前往步骤3,若没有,则该处错误修补成功

步骤3.查验错误处的命名是否发生错误,需要注意C#是区分大小写的,确保您的命名正确。再次编译运行,若该处依然存在编译错误,前往步骤4,若没有,则该处错误修补成功

步骤4.验证开头的命名空间引用是否完整,不要将引用放在程序中间。再次编译运行,若该处依然存在编译错误,前往步骤4,若没有,则该处错误修补成功

步骤5.如果您确信您的代码准确无误,验证您的命名空间定义处与您出问题的地方的项目框架是否一样,若不是,一律修改为 .NET Framework 4.5,若问题仍无法得到解决,请自行思考后询问群友并向我反馈(如果您愿意的话)。

#002 CS0103: The name ‘X’ does not exist in the current context

当这则错误信息,意味着您的编译器无法在您的程序中找到您的变量名或方法名。 请跟随以下步骤来修补您的程序。

步骤1.找到出问题的字段,将鼠标移到它的上面并看看VS是否提供了可能的修补方案,若提供了,前往步骤2,若没有提供,前往步骤3

步骤2.使用VS提供的修补方案修补程序,再次编译运行,若该处依然存在编译错误,前往步骤3,若没有,则该处错误修补成功

步骤3.检查您的变量名或方法名是否发生错误,需要注意C#是区分大小写的,确保您的命名正确。再次编译运行,若该处依然存在编译错误,前往步骤4,若没有,则该处错误修补成功

步骤4.检查您的变量或方法是否在该程序中第一次出现,若是,转往步骤5,若不是,转往步骤6

步骤5.查看您的变量或方法是否被定义,若没有被定义,请自行补上或者添加引用并再次编译运行,若已经被定义,前往步骤6

步骤6.检查您程序的层次结构,您的变量或方法是否在其定义的作用域内?若不是,请重新定义您的变量或方法,若问题仍然无法被解决,请自行思考后询问群友并向我反馈(如果您愿意的话)。

#003 CS0115: ‘X’: no suitable method found to override

当这则错误信息,意味着您的编译器无法重写您要求他重写的方法/操作符。 请跟随以下步骤来修补您的程序。

步骤1.找到出问题的字段,将鼠标移到它的上面并看看VS是否提供了可能的修补方案,若提供了,前往步骤2,若没有提供,前往步骤3

步骤2.使用VS提供的修补方案修补程序,再次编译运行,若该处依然存在编译错误,前往步骤3,若没有,则该处错误修补成功

对于这个(以及少数其他几个)编译错误您应该注意的是, VS提供的修补方案很可能是不准确的(只要不是您忘记定义整个方法/操作符),在尝试完之后一定要检查结果是否是您想要的

VS给出的除了让您的代码更好看对解决问题毛用没有的修补建议

步骤3.检查要被您重载的方法/操作符是否属于不能被重载的类型,下面将给出一个不能被重载的操作符的表格

步骤4.检查要被您重载的方法是否被定义,如果被定义,请转步骤5,如果未被定义,请检查自己程序的引用是否完整,并对漏写的方法进行定义。 再次编译运行,若该处依然存在编译错误 ,请前往步骤6 ,若没有,则该处错误修补成功

对引用的补充
对定义的补充

步骤5.检查您的重载的方法名是否发生错误,需要注意C#是区分大小写的,确保您的命名正确。再次编译运行,若该处依然存在编译错误,请前往步骤6,若没有,则该处错误修补成功

这种错误尽量少犯

步骤6.很抱歉,您的问题暂时无法被这篇文章解决,请在自行思考后向群友提问,并向我反馈(如果您愿意的话)。

《tML模组编写常见编译错误整理》有2个想法

  1. Pingback: Kid:1.4Tml疑难解答 - 裙中世界

发表回复