在c#中使用#line指令更改错误或警告的默认行号的背后原因是什么?

如何解决在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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?