使用MEF加载dll时的System.Security.Permissions.FileIOPermission

时间:2010-07-16 12:40:35

标签: asp.net iis-7 mef

我正在尝试将一些dll加载到ASP.NET MVC应用程序中的MEF DirectoryCatalog中:

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

当我通过Cassini Web服务器(即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 :(得分:0)

如果您确定自己完全信任则更有可能是路径/权限错误。你确定你可以访问的路径吗?

答案 1 :(得分:0)

该异常使您看起来并没有真正完全信任。检查AppDomain.IsFullyTrusted属性以验证您的身份。如果是,那么可能是ASP.NET作为OS用户在IIS下具有降低的权限运行,并且它没有调用GetFullPath的权限。作为一种解决方法,您可以自己扫描目录,为每个DLL创建AssemblyCatalog,并将所有AssemblyCatalog添加到AggregateCatalog中。