【问题标题】:System.Security.Permissions.FileIOPermission when using MEF to load dll's使用 MEF 加载 dll 时的 System.Security.Permissions.FileIOPermission
【发布时间】:2011-03-16 22:43:33
【问题描述】:

我正在尝试将一些 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) 中的信任级别设置为完整。没有什么可能导致它的想法。有什么建议吗?

【问题讨论】:

  • 您的应用程序肯定没有完全信任。这不可能是文件夹安全问题,因为您甚至没有被授予 FileIOPermission。

标签: asp.net iis-7 mef


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多