使用Roslyn动态编译控制器

Tho*_*mas 5 asp.net asp.net-mvc dynamic roslyn

随着Roslyn CTP的公开化,除了编写c#脚本之外,我们可以尝试考虑我们可以用它做的很酷的事情.

由于asp.net mvc允许你编写自定义控制器工厂,我们可以编写一个工厂

  • 即时编译源文件中的控制器
  • 将新创建的类型加载到运行时(运行时可以处理吗?)
  • 如果以前对同一控制器的请求已经完成,则取代之前的类型

这将允许我们快速原型化或更改控制器,因为您可以简单地编写代码,controllerfactory将获取更改而无需重新编译.

Dav*_*oth 5

几个月前,我已经使用monos编译器作为服务实现了运行时控制器.

你可以在这里找到这些信息并链接到github上的代码:http://www.fusonic.net/en/blog/2011/04/01/scripting-asp-net-mvc-controllers-at-runtime/

虽然它在开始时看起来非常好,但由于存在一些限制,它在现实世界中并不是非常有用.

首先,Visual Studio位于您和您的代码中间,因为它严格锁定并禁止在调试时更改源代码.因此,编辑源文件的唯一方法是在没有附加调试器的情况下运行.

第二个问题是它(显然)仅限于控制器.一旦在运行时开始编辑控制器,就需要一个真正的脚本环境!例如,在运行时更改模型,服务以及项目中的任何代码.

那么你有问题,你不能调试你的动态代码,等等......

几天后我停止使用它,因为它不是一个完整的解决方案.我梦想着.net的解决方案,整个mvc项目可以在运行时动态编译,不仅限于控制器(如真正的脚本框架),还包括调试.

在java世界中有一个解决方案:http://zeroturnaround.com/jrebel/