2011-10-14 21 views
5

Tôi đang biên dịch động mã, sử dụng CompileAssemblyFromSource với nhiều nguồn..NET CompileAssemblyFromSource: Xác định nguồn nào bị lỗi?

Trong trường hợp xảy ra lỗi biên dịch, tôi có thể truy xuất số dòng, v.v. từ bộ sưu tập Errors.

Tuy nhiên, số dòng là số dòng trong tất cả các nguồn. Những gì tôi cần là nguồn và số dòng từ bên trong nguồn không thành công (trong số các nguồn được thêm vào).

Điều đó có thể thực hiện được mà không cần tính toán nhào lộn?

+3

Tôi muốn xem xét sử dụng 'CompileAssemblyFromFile' thay vì (ít nhất là tùy chọn gỡ lỗi hoặc tiết) cho phép bạn xem xét các nguồn sau khi thực tế và xem điều gì đang diễn ra. Nếu bạn sử dụng các tệp tạm thời, bạn luôn có thể dọn dẹp sau đó ... –

+1

@Paul Đó phải là câu trả lời! –

+0

@Paul: Viết vào một tập tin tạm thời Tôi không thể sử dụng tôi sợ. Trong giải pháp của tôi (có vấn đề cụ thể), các nguồn được thu thập từ nhiều nguồn riêng lẻ (thậm chí từ người dùng cuối) và tôi chỉ cần xem nguồn thực sự có vấn đề. –

Trả lời

0

Tôi làm điều này trong một trong các ứng dụng của mình và nếu có lỗi, tôi sẽ ghi nguồn đã được biên dịch - nguồn đã tạo ra lỗi trình biên dịch - cùng với tất cả các thông báo lỗi được tạo trong quá trình biên dịch. Tôi đặt các thông báo lỗi này trong các bình luận và thêm chúng vào cuối tập tin nguồn. Tệp nguồn được viết bằng File.WriteAllText() nếu tôi nhớ chính xác, trong một tệp trong thư mục tạm thời của người dùng, và sau đó tôi ném một ngoại lệ với đường dẫn đến mô-đun nguồn đó. Tất cả điều này chỉ xảy ra nếu có lỗi biên dịch. Nếu không có lỗi, sau đó tôi không viết ra nguồn theo cách này.

Có thực sự chỉ là một mô-đun trong trường hợp của tôi bởi vì tôi nối tất cả các nguồn vào một mô-đun duy nhất. Không có nhầm lẫn về những gì "dòng 143" có nghĩa là trong tình huống này.