无法加载文件或程序集

时间:2009-05-26 06:22:37

标签: asp.net vb.net

我在.Net中有一个Web应用程序,我在某些页面中使用Ajax控件。这些页面在localhost中工作,但托管时,包含Ajax的页面显示以下错误。

'/ Allforkids'应用程序中的服务器错误。

安全例外

描述:应用程序尝试执行安全策略不允许的操作。要授予此应用程序所需的权限,请与您的系统管理员联系或在配置文件中更改应用程序的信任级别。

异常详细信息:System.Security.SecurityException:请求类型为'System.Security.Permissions.FileIOPermission,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的权限失败。

来源错误:

在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。

堆栈追踪:

[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() +58
   System.Reflection.Assembly.VerifyCodeBaseDiscovery(String codeBase) +118
   System.Reflection.Assembly.get_CodeBase() +35
   System.Web.Handlers.ScriptResourceHandler.GetCodeBaseWithAssert(Assembly assembly) +31
   System.Web.Handlers.ScriptResourceHandler.GetLastWriteTime(Assembly assembly) +36
   System.Web.Handlers.ScriptResourceHandler.GetAssemblyInfoInternal(Assembly assembly) +61
   System.Web.Handlers.ScriptResourceHandler.GetAssemblyInfo(Assembly assembly) +62
   System.Web.Handlers.RuntimeScriptResourceHandler.System.Web.Handlers.IScriptResourceHandler.GetScriptResourceUrl(Assembly assembly, String resourceName, CultureInfo culture, Boolean zip, Boolean notifyScriptLoaded) +325
   System.Web.Handlers.ScriptResourceHandler.GetScriptResourceUrl(Assembly assembly, String resourceName, CultureInfo culture, Boolean zip, Boolean notifyScriptLoaded) +33
   System.Web.UI.ScriptManager.GetScriptResourceUrl(String resourceName, Assembly assembly) +89
   System.Web.UI.ScriptRegistrationManager.RegisterClientScriptResource(Control control, Type type, String resourceName) +111
   System.Web.UI.ScriptManager.RegisterClientScriptResource(Control control, Type type, String resourceName) +9

版本信息:Microsoft .NET Framework版本:2.0.50727.3082; ASP.NET版本:2.0.50727.3082

任何人都可以提供适当的解决方案来摆脱这个错误吗?

3 个答案:

答案 0 :(得分:1)

这看起来像您需要提出的托管服务提供商。从错误中可以看出托管服务器中的配置设置禁止访问本地文件。

您可以尝试将此添加到您的web.config:

<system.web>
  ...
  <trust level="Medium" originUrl="" />
  ...
</system.web>

但是,如果托管服务提供商在machine.config中有一个取代它的设置,它将没有什么区别。这里有更多information

答案 1 :(得分:1)

它可能是您的文件夹/文件的安全权限。您是否正在写入任何文件(如Access DB)?确保服务器上的ASP.Net机器帐户(例如PCName \ ASPNET)可以访问该文件夹。

答案 2 :(得分:0)

以下是Assembly类中的代码:

 private void VerifyCodeBaseDiscovery(String codeBase)
    {                
        if ((codeBase != null) &&
            (String.Compare( codeBase, 0, s_localFilePrefix, 0, 5, true, CultureInfo.InvariantCulture) == 0)) {
            System.Security.Util.URLString urlString = new System.Security.Util.URLString( codeBase );
            new FileIOPermission( FileIOPermissionAccess.PathDiscovery, urlString.GetFileName() ).Demand();
        }
    }

在.Demand()方法上抛出异常,要求对包含该脚本的文件进行FileIOPermissionAccess.PathDiscovery。

我的猜测是IIS工作进程没有对包含脚本的路径的READ / BROWSE访问权限。

如果要将自己的脚本注册到ScriptManager,请检查文件路径(通常的经验法则,脚本不应该在父文件夹中(例如.. \ Scripts)。)

如果在AJAX Extensions脚本资源上出现此异常,则可能是安装AJAX Extensions时出现问题。您需要请求您的托管服务提供商进行检查。

PS。堆栈跟踪还有更多内容吗?看起来很奇怪,堆栈中的第一个调用是“RegisterClientScriptResource”。