2010-08-17 35 views
8

Tôi đang cố gắng gỡ lỗi mẫu T4 được xử lý trước và tôi không thể bước vào lớp được tạo bằng cách chạy mẫu được xử lý trước. Tôi có thể tạo một thể hiện của lớp nhưng ngay khi tôi cố gắng bước vào trong khi gỡ lỗi, một cửa sổ mới bật lên có nội dung làGỡ lỗi mẫu trước khi xử lý T4 không hoạt động - Visual Studio 2010 RTM

Không có nguồn. Không có sẵn mã nguồn cho vị trí hiện tại.

Hiểu biết của tôi là các mẫu được xử lý trước có thể được gỡ lỗi giống như một lớp C# bình thường, điều này có đúng không? Có điều gì đặc biệt mà bạn cần làm để có thể bước vào lớp được xác định bởi một mẫu được xử lý trước không?

Đây là một mẫu rất đơn giản và mã gọi mà tôi gặp vấn đề với:

TestPreprocessedTemplate.tt:

<#@ template language="C#" debug="true" #> 
Hello <# Write("World"); #> 

Kiểm tra Code:

var template = new TestPreprocessedTemplate(); 
string test = template.TransformText(); 

Chỉnh sửa - Đã thêm câu lệnh debug = "true" theo đề xuất bên dưới, vẫn có cùng một vấn đề.

Cập nhật - Tôi cũng đăng câu hỏi này trên các diễn đàn MSDN và nhận được phản hồi từ nhân viên MS mà chỉ có những gì tôi mô tả ở trên nên thực sự làm việc. Bất cứ ai khác đã từng gặp phải vấn đề này?

Cập nhật - Với một số trợ giúp từ diễn đàn MSDN, có vẻ như vấn đề là với chỉ thị #line được thêm vào lớp C# được tạo. Nhận xét chúng cho phép tôi bước qua mã như mong đợi. Có cách nào để ngăn không cho các chỉ thị này được thêm vào lớp được tạo không? Với trang ASP.NET, bạn có thể thêm tham số LinePragmas = "false" nhưng có vẻ như không có bất kỳ hiệu ứng nào trên mẫu T4. Ý tưởng nào?

+0

Có vẻ như bạn đang sử dụng trình chỉnh sửa T4 hữu hình, hiển thị vấn đề này. Nếu bạn tắt trình chỉnh sửa này, bạn sẽ thấy rằng việc gỡ lỗi mẫu đã được xử lý trước sẽ đưa bạn đến đúng vị trí trong chính tệp tt. Nếu bạn thực sự muốn gỡ lỗi tệp C#/VB được tạo, thì kỹ thuật của Paiden để xóa chỉ thị #line được mô tả bên dưới là một chỉ dẫn tốt. – GarethJ

+0

Xem câu hỏi liên quan http://stackoverflow.com/q/2945450/141172 –

Trả lời

1

Có vẻ như bạn thiếu mục debug="true" trong tiêu đề mẫu cần thiết để gỡ lỗi.

Ngoài ra, tôi sẽ xem nhanh bài viết trên blog sau đây để xem xét chi tiết quá trình gỡ lỗi mẫu T4.

+0

Tôi cũng đã thử điều đó và chỉ để đảm bảo rằng tôi vừa thử lại, chạy mẫu và cố gắng gỡ lỗi lại. Cùng một vấn đề ... Đối với bài viết, tôi đã đi qua mà trước và tôi có thể gỡ lỗi một mẫu t4 bình thường, nhưng khi tôi cố gắng gỡ lỗi các mẫu preprocessed tôi không thể. – user423293

1

- Với một số sự giúp đỡ từ các diễn đàn MSDN, có vẻ như vấn đề là với các chỉ thị #line mà có được thêm vào C# lớp được tạo ra. Nhận xét chúng cho phép tôi bước qua mã như mong đợi. Có cách nào để ngăn không cho các chỉ thị này được thêm vào lớp được tạo không? Với ASP.NET trang bạn có thể thêm tham số LinePragmas = "false" nhưng điều đó dường như không có bất kỳ hiệu ứng nào trên mẫu T4. Ý tưởng nào?

Các chỉ thị #line thực sự tạo ra vấn đề khi gỡ lỗi preprocessed mẫu T4 (debugger luôn tìm kiếm các tập tin * .tt thay vì * .cs tập tin được tạo ra). Tôi không thể tìm thấy bất kỳ tùy chọn nào để biến thế hệ chỉ thị #line. Vì vậy, tôi đang sử dụng Macro VisualStudio sau để thoát khỏi chúng

Sub RemoveLineDirectives() 
    DTE.ActiveDocument.Selection.SelectAll() 
    DTE.ActiveDocument.Selection.ReplaceText("#line", "//#line") 
End Sub 

Tôi luôn gán Macro cho một số lệnh ngắn bên trong cửa sổ lệnh

alias rl Macros.MyMacros.Module1.RemoveLineDirectives 

Vì vậy, tôi có thể loại bỏ chỉ thị #line đơn giản bằng cách gọi rl trong cửa sổ lệnh trong khi tệp * .cs được tạo đang hoạt động, khi tôi cần gỡ lỗi mẫu Preprocessed T4. Sau khi loại bỏ các chỉ thị # gỡ lỗi lớp mẫu đã tạo hoạt động như mong đợi.

Không phải là giải pháp lý tưởng nhưng nó hoạt động :)

Các vấn đề liên quan