2009-08-31 29 views
8

Tôi có một hệ thống templating trông giống như mã ASP kiểu cũ. Tôi chạy điều này thông qua một lớp học mà viết lại toàn bộ điều vào mã nguồn C#, biên dịch, và cuối cùng thực thi nó. Những gì tôi đang tự hỏi là nếu có một số loại # pragma giống như chỉ thị tôi có thể rắc mã C# tạo ra với điều đó sẽ làm cho các lỗi biên dịch phù hợp với các số dòng trong tập tin mẫu của tôi không? Không.Có bất kỳ chỉ thị #pragma hoặc tương tự nào cho mã C# được tạo để khớp số dòng mã mẫu với số dòng C# không?

Ví dụ, giả sử tôi có dòng đầu tiên và duy nhất này trong mã mẫu của tôi:

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

nhưng sau đó để biên dịch này, tôi phải thêm một namespace, một lớp học, một phương pháp và một số nồi hơi -khai mã cho nó, vì vậy dòng này ở trên, là dòng # 1 trong tệp mẫu của tôi, thực sự kết thúc là dòng # 17 (số ngẫu nhiên, chỉ nhằm mục đích minh họa) trong mã C#. Lỗi trình biên dịch sẽ tự nhiên gắn cờ lỗi của tôi là đang ở trên dòng # 17, chứ không phải trên dòng # 1.

Tôi nhớ từ một ngôn ngữ lập trình khác mà tôi đã sử dụng trước đây (mặc dù tôi không thể nhớ được ngôn ngữ nào) mà nó có chỉ thị mà tôi có thể thêm vào, điều này sẽ làm cho số dòng lỗi xếp hàng.

Có điều gì trong C# 3.5 không?

Trả lời

16

Bạn có #line preprocessor directive.

#line cho phép bạn sửa đổi số dòng của trình biên dịch và (tùy chọn) đầu ra tên tệp cho lỗi và cảnh báo.

#line directive có thể được sử dụng trong bước trung gian tự động trong quá trình xây dựng. Ví dụ: nếu các dòng đã bị xóa khỏi tệp mã nguồn ban đầu, nhưng bạn vẫn muốn trình biên dịch tạo ra đầu ra dựa trên đánh số dòng gốc trong tệp, bạn có thể xóa các dòng và sau đó mô phỏng đánh số dòng gốc với #line.

Các #line hidden chỉ ẩn các đường liên tiếp từ trình gỡ lỗi, như vậy mà khi bước phát triển thông qua các mã, bất kỳ ranh giới giữa một #line hidden#line chỉ thị tiếp theo (giả định rằng nó không phải là một #line chỉ ẩn) sẽ được bước lên. Tùy chọn này cũng có thể được sử dụng để cho phép ASP.NET phân biệt giữa mã do người dùng xác định và do máy tạo ra. Mặc dù ASP.NET là người tiêu dùng chính của tính năng này, có khả năng là nhiều máy phát điện nguồn sẽ sử dụng nó.

A #line hidden chỉ thị không ảnh hưởng đến tên tệp hoặc số dòng trong báo cáo lỗi. Tức là, nếu một lỗi gặp phải trong một khối ẩn, trình biên dịch sẽ báo cáo tên tệp hiện tại và số dòng của lỗi.

Chỉ thị #line filename chỉ định tên tệp bạn muốn xuất hiện trong đầu ra trình biên dịch. Theo mặc định, tên thực tế của tệp mã nguồn được sử dụng. Tên tệp phải nằm trong dấu ngoặc kép ("") và phải đứng trước một số dòng.

+0

+1, tìm hiểu điều gì đó mới hàng ngày – JaredPar

+0

Đó chính xác là những gì tôi cần! Cảm ơn! –

+0

@Jared: Tôi thấy nó một ngày tìm kiếm thông qua mã WPF được tạo ra và là như thế. : hmm: :) Đó là những gì liên kết lỗi với tệp XAML gốc. –