Компиляция кода в Medium Trust - PullRequest
9 голосов
/ 22 декабря 2010

Вместе с Беном (@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 # в среде среднего доверия?

Заранее спасибо.

1 Ответ

2 голосов
/ 22 декабря 2010

Возможно, вы могли бы рассмотреть возможность использования MCS (Mono Compiler Service), которая имеет возможность записи в сборку в памяти вместо файла (да, я знаю, что CSharpCodeProvider имеет возможность только в памяти, но все равно записывает временные файлыи выполняет операции с файловой системой).

Предостережение: Вы, вероятно, столкнетесь с проблемами безопасности и с MCS, но он с открытым исходным кодом (очевидно), и я смог изменить его, чтобы выполнить компиляцию выражений вSilverlight ... Просто скажу, что это, вероятно, не будет кусок пирога.

Обновление: согласно странице с дорожной картой Mono, мои модификации больше не нужны, поскольку говорят, что они поддерживают Silverlight из коробки в версии 2.8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...