2009-08-31 1 views
8

이전 스타일의 ASP 코드와 비슷한 템플릿 시스템이 있습니다. 저는이 모든 것을 C# 소스 코드로 다시 작성하고 컴파일하고 마지막으로 실행하는 클래스를 통해이 코드를 실행합니다.생성 된 C# 코드에 대해 #pragma 또는 유사한 지시문이 템플릿 코드 행 번호와 C# 행 번호를 비교합니까?

어떤 종류의 #pragma-like 지시문이 있으면 컴파일 된 오류가 내 템플릿 파일의 줄 번호와 일치하게 만드는 생성 된 C# 코드를 뿌릴 수 있습니까?

Object o = datta; // should be data, compiler error 

하지만 내가 네임 스페이스, 클래스, 메소드, 일부 보일러를 추가해야이 컴파일하기 위해 : 예를 들어

, 이제 내 템플릿 코드이 처음이자 유일한 라인이 있다고 가정 해 보자 - plate 코드를 사용하므로 위의이 줄 (템플릿 파일의 # 1 줄)은 실제로 C# 코드에서 줄 # 17 (임의의 숫자, 설명의 목적으로 만 사용)이됩니다. 컴파일러 오류로 인해 자연스럽게 내 오류가 # 17 번 라인이 아니라 # 1 번 라인에 있다고 플래그됩니다.

이전에 사용했던 다른 프로그래밍 언어에서 기억할 수는 있지만 (명령문을 기억할 수는 없지만) 내가 추가 할 수있는 지시문이있어서 오류 행 번호가 일렬로 표시된다는 것을 기억합니다.

C# 3.5에는 그런 것이 있습니까?

답변

16

귀하는 #line preprocessor directive입니다.

#line을 사용하면 오류 및 경고를 위해 컴파일러의 줄 번호와 파일 이름 출력을 수정할 수 있습니다.

#line directive은 빌드 프로세스의 자동화 된 중간 단계에서 사용될 수 있습니다. 예를 들어 원본 소스 코드 파일에서 행을 제거했지만 컴파일러에서 파일의 원래 행 번호에 따라 출력을 생성하도록하려면 행을 제거한 다음 #line으로 원래 행 번호 매기기를 시뮬레이트 할 수 있습니다.

#line hidden 지시자 것 같은 코드를 통해 현상 공정하는 #line hidden과 다음 #line 지시자 간의 선 (그것은 다른 # 라인 숨겨진 지시문이 아니라고 가정 함) 때 디버거에서 연속적인 라인을 숨기는 계단을 올랐다. 또한이 옵션을 사용하여 ASP.NET에서 사용자 정의 코드와 시스템 생성 코드를 구별 할 수 있습니다. ASP.NET이이 기능을 주로 사용하지만 더 많은 소스 생성기가이 기능을 사용하게 될 것입니다.

#line hidden 지시문은 오류보고의 파일 이름이나 줄 번호에 영향을주지 않습니다. 즉, 숨겨진 블록에서 오류가 발생하면 컴파일러는 현재 파일 이름과 오류의 행 번호를보고합니다.

#line filename 지시문은 컴파일러 출력에 표시 할 파일 이름을 지정합니다. 기본적으로 소스 코드 파일의 실제 이름이 사용됩니다. 파일 이름은 큰 따옴표 ("") 여야하며 줄 번호 앞에 와야합니다.

+0

+1 매일 새로운 것을 배울 – JaredPar

+0

정확히 내가 필요한 것! 감사! –

+0

@ 자레드 (Jared) : 언젠가 생성 된 WPF 코드를보고 봤습니다. : hmm : :) 원본 XAML 파일에 오류를 연결하는 부분입니다. –

관련 문제