【发布时间】:2010-12-21 22:05:30
【问题描述】:
与 Ben (@BuildStarted) 一起,我们一直在构建 RazorEngine project,它旨在允许您在 ASP.NET MVC 之外编译和解析任意模板。该项目已经发布了一段时间,反馈非常好(感谢所有人!)。 但是,我们遇到了一个问题:中等信任度。
因为我们使用 CSharpCodeProvider 来编译 Razor 生成的类(以加载到当前的 AppDomain 中执行),所以在尝试调用它时遇到了 SecurityException,因为它强制执行了 LinkDemand。当一个普通的 ASP.NET 页面被编译时(不管信任级别如何),它是通过一个通常是 GAC 的BuildProvider 来完成的,因此被隐式地授予了适当的编译权限。因此 ASP.NET WebForms 在中等信任中作为标准工作。
我们的代码没有,我们需要针对我们构建的库不会部署到 GAC 并且在中等信任下运行的场景。所以我们考虑专门为它构建一个BuildProvider 并将编译推迟到 ASP.NET 构建系统,但这似乎过于复杂和脱节,并且提供程序本身既需要通过文件扩展名进行映射,又需要虚拟路径(可能或者可能无法解析为物理文件 - 想想VirtualPathProvider)。这一切似乎有点过头了,只是为了让项目在中等信任下运行;不仅如此,而且纯粹用于 ASP.NET 项目,因为我们的引擎也可以在 ASP.NET 之外运行
所以我的问题是,有人知道在中等信任环境中编译 C# 代码的任何技术或技术吗?
提前致谢。
【问题讨论】:
标签: c# asp.net compilation razor