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