如何解决在c#中使用#line指令更改错误或警告的默认行号的背后原因是什么?
我正在阅读Microsoft网页https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/preprocessor-directives/preprocessor-line,其中涉及C#中的#line指令。它解释说,#line 200伪指令强制下一行的编号为200(尽管默认为#6),直到#line default伪指令将行编号恢复为其默认编号为止。
我的问题是,为什么在地球上我们需要为代码中的错误或警告更改行号?
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="board"/>
<property name="password" value="1234"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.sqlSessionfactorybean">
<property name="dataSource" ref="dataSource" />
<!-- classpath: -> src/main/resources -->
<property name="configLocation" value="classpath:myBatis/myBatis-config.xml"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.sqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<!-- DI -->
<bean class="com.board.service.BoardService"></bean>
<bean class="com.board.dao.BoardDao">
<property name="sqlSessionTemplate" ref="sqlSession"/>
</bean>
</beans>
编译产生以下输出:
class MainClass
{
static void Main()
{
#line 200 "Special"
int i;
int j;
#line default
char c;
float f;
#line hidden // numbering not affected
string s;
double d;
}
}
解决方法
在许多情况下,此指令很有用,大多数情况下大多数C#开发人员都从未见过。
我知道的所有场景都包含一个C#文件,该C#文件是由其他进程生成或修改的,并且#line
指令用于确保.pdb信息的编译版本。该文件提供了有关原始输入的准确信息。
The documentation page you've been referred通过其示例来暗示这一点。他们想象一个构建步骤,该步骤将在编译结果之前从原始C#文件中删除(删除)行。如果调试信息显示已处理的行号而不是原始的行号,则尝试调试该代码的人将遇到困难,因为在调试时,他们可能会查看原始的创作文件,而不是修改的预处理文件。 / p>
我知道的其他示例包括T4处理的输出,以及编译XAML文件时生成的C#文件。在这些情况下,没有原始的C#文件,但是有原始的创作文件,并且如果有异常或其他原因将行号传达给尝试调试代码的人,他们将希望从命令行中了解行号。原始文件,而不是他们可能永远不会看到的生成文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。