2012-04-26 43 views
19

Có thể sửa đổi mã nguồn trước khi biên dịch bằng Roslyn trong tác vụ MSBuild trên máy chủ CI không? Tôi đã thành công để làm những gì tôi muốn trong VS nhưng tôi tự hỏi nếu nó có thể bên ngoài VS. Hiện tại tôi đang xem API của Workspace và API của trình biên dịch và chúng dường như là công cụ thích hợp để đạt được điều đó, nhưng tôi vẫn không chắc chắn là nó có khả thi không? Đặc biệt, tôi lo ngại về việc trả lại những thay đổi mà tôi đã thực hiện cho MSBuild để cho phép nó tiếp tục công việc của mình.Sửa đổi mã nguồn thời gian biên dịch bằng Roslyn

+1

Câu hỏi hay, đã tự hỏi về loại nội dung này gần đây. –

Trả lời

9

Đây chắc chắn là một kịch bản mà chúng tôi đang nghĩ đến. Hôm nay có một số vấn đề khiến cho việc này trở nên khó khăn:

  1. Bạn không thể sử dụng API không gian làm việc để tải dự án/giải pháp như bạn đã ở trong msbuild.
  2. Để sử dụng các API trình biên dịch thông thường, bạn cần tự xây dựng một trình biên dịch có thể là một loạt công việc.

Trong tương lai, chúng tôi muốn cung cấp "Tạo không gian làm việc từ chuỗi lệnh csc/vbc", điều này sẽ dễ dàng hơn nhiều.

Hãy xem Hooking into the compiler (csc.exe or vbc.exe) itselfProblem with using Roslyn in a MS Build Task đối với một số cuộc thảo luận trước về điều này.

+0

Cảm ơn bạn, Kevin Rất mong nhận được các tính năng mới của Roslyn từ nhóm của bạn! –

+0

tôi biết đây là từ năm 2012. có bất kỳ tin tức nào về vấn đề này không? có cách nào dễ dàng không? – riki

1

Tôi chưa đích thân có thể kiểm tra điều này, (vì vậy nếu bạn, xử lý câu trả lời này làm nhận xét), nhưng đọc nội dung về Roslyn, đặc biệt là this mục nhập blog, có vẻ như là possible (xem Rõ ràng, bạn có thể xây dựng một cây cú pháp từ nguồn (không quá ngạc nhiên đối với một trình biên dịch tôi đoán), sau đó sửa đổi điều này bằng cách sử dụng API, và cuối cùng viết nó trở lại chuỗi/tệp hoặc bất cứ điều gì.

Xem thêm MSDN về cây cú pháp Roslyn theo khái niệm và điều này walkthrough về "Chuyển đổi cú pháp"

2

liên quan đến câu hỏi trên Problem with using Roslyn in a MS Build Task,

public class MyTask : Task 

thay đổi Task để AppDomainIsolatedTask là một sửa chữa nhanh chóng. Tôi không có tài khoản msdn vì vậy tôi sẽ đăng nó ở đây. Hy vọng nó có thể giúp đỡ.

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