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
Trả lời
Đâ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:
- 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.
- Để 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) itself và Problem 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.
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! –
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
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"
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 đỡ.
- 1. Chuyển đổi mã Java tại thời gian biên dịch
- 2. Biên dịch và thực thi thời gian của C++ so với mã nguồn C
- 3. Hằng số thời gian biên dịch Flex - Dấu thời gian
- 4. Nhận thời gian biên dịch JAR
- 5. Sử dụng Roslyn để biên dịch Bộ điều khiển động
- 6. C++ Biên dịch chuỗi thời gian biên dịch
- 7. Sửa đổi .Net Exe biên dịch
- 8. Tạo mã thời gian biên dịch trong D
- 9. Chạy PublicResXFileCodeGenerator tại thời gian biên dịch
- 10. Thời gian biên dịch hồ sơ
- 11. Tạo mã tại thời gian biên dịch bằng cách sử dụng các script
- 12. Hiệu suất biên dịch mã bằng biên dịch biên dịch
- 13. Tăng tốc thời gian biên dịch với SSD
- 14. Hằng số thời gian biên dịch Clojure
- 15. offsetof tại thời gian biên dịch
- 16. Thời gian tiêu cực từ trình biên dịch JSP
- 17. Roslyn có phải là công cụ thích hợp để kiểm tra biểu thức thời gian biên dịch không?
- 18. Thời gian kiểm tra biên dịch tồn tại của stdint.h
- 19. Hằng số mảng thời gian biên dịch
- 20. Lỗi thời gian biên dịch Qt. .
- 21. Hệ điều hành biên dịch thời gian
- 22. Cách tính thời gian biên dịch gcc?
- 23. Biên dịch mã động bằng C#
- 24. thời gian biên dịch xem MVC kiểm tra với msbuild
- 25. Xác nhận thời gian biên dịch trong C++?
- 26. Cách giảm thời gian biên dịch với các mẫu C++
- 27. Có thể cấm bắt nguồn từ một lớp học tại thời gian biên dịch không?
- 28. Cách biên dịch Helloworld với mã nguồn Android
- 29. Sửa đổi tệp mã nguồn Clojure trong clojure
- 30. DotNetOpenAuth biên dịch sau khi sửa đổi nhưng ném ngoại lệ thời gian chạy khi chạy dự án mẫu
Câu hỏi hay, đã tự hỏi về loại nội dung này gần đây. –