System.Security.Permissions.FileIOPermission при использовании MEF для загрузки DLL - PullRequest
2 голосов
/ 16 июля 2010

Я пытаюсь загрузить некоторые библиотеки DLL в MEF DirectoryCatalog в приложении ASP.NET MVC:

var catalog = new DirectoryCatalog(HttpRuntime.BinDirectory, "Toptable.Mobile.*.dll");

Когда я запускаю приложение через веб-сервер Cassini (то есть F5), все работает нормально, однако при размещении в IIS (7) я получаю следующее исключение:

[SecurityException: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
   System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) +0
   System.Security.CodeAccessPermission.Demand() +54
   System.IO.Path.GetFullPath(String path) +193
   System.ComponentModel.Composition.Hosting.DirectoryCatalog.GetFullPath(String path) +267
   System.ComponentModel.Composition.Hosting.DirectoryCatalog.Initialize(String path, String searchPattern) +144
   System.ComponentModel.Composition.Hosting.DirectoryCatalog..ctor(String path, String searchPattern) +166
   Toptable.Mobile.MvcApplication.Application_Start() in C:\Dev\Toptable\Toptable.Mobile\Toptable.Mobile.Web\Global.asax.cs:74

Уровни доверия .NET для приложения установлены как "Полные" как для сайта, так и для всего мира, и я установил уровень доверия в web.config (system.web / trust) на Полный. Не хватает идей о том, что может быть причиной этого. Есть предложения?

Ответы [ 2 ]

0 голосов
/ 17 июля 2010

Исключение создает впечатление, что вы на самом деле не работаете с полным доверием.Проверьте свойство AppDomain.IsFullyTrusted , чтобы убедиться, что вы являетесь.Если да, то может быть так, что ASP.NET работает как пользователь ОС с ограниченными правами в IIS, и у него нет разрешения на вызов GetFullPath.В качестве обходного пути вы можете отсканировать каталог самостоятельно, создать AssemblyCatalog для каждой DLL и добавить все AssemblyCatalogs в AggregateCatalog.

0 голосов
/ 16 июля 2010

, если вы уверены, что находитесь в полном доверии, скорее всего ошибка пути / прав доступа. Вы уверены, что путь, по которому вы идете, доступен?

...