2011-10-21 32 views
5

Với Roslyn CTP mở ra, chúng ta có thể thử nghĩ về những điều tuyệt vời mà chúng ta có thể làm với nó ngoài viết kịch bản lệnh C#.Sử dụng Roslyn để biên dịch Bộ điều khiển động

Kể từ asp.net MVC cho phép bạn viết các nhà máy điều khiển tùy chỉnh, chúng tôi có thể viết một nhà máy mà

  • Biên dịch bộ điều khiển từ tập tin nguồn on-the-fly
  • tải loại mới được tạo ra trong để thời gian chạy (thể runtime xử lý đó?)
  • Và bác bỏ loại trước đó nếu yêu cầu trước đó cho bộ điều khiển tương tự đã được thực hiện

này sẽ cho phép u s để nhanh chóng nguyên mẫu hoặc thay đổi bộ điều khiển vì bạn có thể chỉ cần viết mã và controllerfactory sẽ nhận các thay đổi mà không cần phải biên dịch lại.

+2

Điều này có thể được thực hiện mà không cần Roslyn. – Ankur

+0

Hãy xem Orchard CMS: nó tự động tải các mô-đun từ mã nguồn ngày hôm nay. –

+0

Orchard làm như vậy bằng cách biên dịch csproj trước khi tải các hội đồng, nhưng mô tả nó là "phần nào thử nghiệm": http://www.orchardproject.net/docs/Orchard-module-loader-and-dynamic-compilation.ashx – Thomas

Trả lời

5

Tôi đã triển khai bộ điều khiển thời gian chạy bằng trình biên dịch đơn như một dịch vụ cách đây vài tháng.

Bạn có thể tìm các infos và liên kết đến mã trên github đây: http://www.fusonic.net/en/blog/2011/04/01/scripting-asp-net-mvc-controllers-at-runtime/

Mặc dù nó trông thật sự tốt đẹp ngay từ đầu, nó không phải là siêu hữu ích trong thực tế vì một số hạn chế.

Trước hết Visual Studio đứng giữa bạn và mã của bạn vì nó khóa chặt và cấm thay đổi mã nguồn trong khi gỡ lỗi. Vì vậy, cách duy nhất để chỉnh sửa các tệp nguồn của bạn là bằng cách chạy mà không cần trình gỡ lỗi đính kèm.

Vấn đề thứ hai là nó (rõ ràng) bị giới hạn đối với bộ điều khiển. Ngay sau khi bạn bắt đầu chỉnh sửa các bộ điều khiển của bạn trong thời gian chạy, bạn muốn có một môi trường kịch bản thực sự! Ví dụ để thay đổi Mô hình và Dịch vụ của bạn và bất kỳ mã nào bạn có trong dự án của mình khi chạy.

Sau đó, bạn có vấn đề mà bạn không thể gỡ lỗi mã động của bạn và vân vân ...

tôi đã ngừng sử dụng nó sau vài ngày bởi vì nó chỉ là không phải là một giải pháp hoàn chỉnh. Tôi đang mơ ước một giải pháp cho .net nơi toàn bộ dự án mvc có thể được biên dịch động trong thời gian chạy, không giới hạn các bộ điều khiển (như một khung kịch bản thực) và bao gồm gỡ lỗi.

Trong java thế giới có một giải pháp cho việc này: http://zeroturnaround.com/jrebel/

+0

Vì vậy, nó có thể, nhưng nó chỉ là không thuận tiện để làm việc với. – Thomas

+0

Tôi đang sử dụng mono để làm điều này trong dự án asp MV 3 của tôi. Nó thực sự là một phương pháp tiết kiệm thời gian khi dự án của bạn lớn. – lontivero

2

Tôi không biết nhiều về nhà máy điều khiển MVC, nhưng có, nó có vẻ giống như một cái gì đó có thể được thực hiện. Bước 2 có thể được thực hiện với một Assembly.Load() tiêu chuẩn của mã được phát ra. Roslyn cũng có khả năng biên dịch thành một phương pháp năng động nếu có thể, thậm chí còn nhẹ hơn.

Để biết ví dụ có liên quan, hãy xem mẫu thử nghiệm Razor view engine mà David Ebbo đặt lại với nhau.

+0

Làm cách nào để chuyển một kịch bản thành một phương thức động? –

1

Hãy xem ScriptCs. Tôi tin rằng sớm hơn nó sẽ có thể làm những việc như thế.

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