Вместе с Беном (@BuildStarted) мы создали проект RazorEngine , который позволяет компилировать и анализировать произвольные шаблоны вне ASP.NET MVC. У проекта уже было несколько релизов, и отзывы были отличными (спасибо всем!). Но мы столкнулись с проблемой: среднее доверие.
Поскольку мы используем CSharpCodeProvider для компиляции классов, сгенерированных Razor (для загрузки в текущий домен приложения для выполнения), мы сталкиваемся с SecurityException
при попытке вызвать его из-за наложенного на него LinkDemand. . Когда обычная страница ASP.NET компилируется (независимо от уровня доверия), это делается с помощью BuildProvider
, который обычно используется GAC, и, таким образом, неявно получает соответствующие разрешения для компиляции. Следовательно, ASP.NET WebForms стандартно работает со средним доверием.
В нашем коде нет, и нам нужно нацеливаться на сценарии, в которых наша встроенная библиотека не будет развернута в GAC и работает со средним доверием. Поэтому мы рассматривали возможность создания BuildProvider
специально для него и переноса компиляции в систему сборки ASP.NET, но это кажется слишком сложным и несвязным, а сам провайдер требует как сопоставления через расширение файла, так и виртуального путь (который может разрешаться или не разрешаться в физический файл - подумайте о VirtualPathProvider
). Все это кажется излишним, просто для того, чтобы проект работал со средним доверием; не только это, но и исключительно для проектов ASP.NET, поскольку наш движок также работает вне ASP.NET
Итак, мой вопрос заключается в следующем: знает ли кто-нибудь о каких-либо методах или технологиях для компиляции кода C # в среде со средним уровнем доверия?
]Заранее спасибо.