在ASP.NET MVC中使用IISLocal(可在IISExpression上使用)时出现奇怪的异常

adv*_*api 5 asp.net-mvc iis-7.5

我正在开发使用KendoUI的ASP.NET MVC 5应用程序。如果我在IIS Express下运行项目,则一切正常...如果使用IIS Local,则在尝试加载视图时出现以下异常

System.Web.dll中发生类型为'System.Web.HttpException'的第一次机会异常

Additional information: Invalid file name for file monitoring: 'C:\svn\Projects\xxx\trunk\xxx\Views\Shared\EditorTemplates'. Common reasons      for failure include:

- The filename is not a valid Win32 file name.

- The filename is not an absolute path.

- The filename contains wildcard characters.

- The file specified is a directory.

- Access denied.
Run Code Online (Sandbox Code Playgroud)

我刚刚在Google上搜索过,有人建议在Debug-> Exception抛出异常复选框下禁用它,但是如果这样做,我将无法显示视图,因为输出只是JavaScript ...

有人找到解决此问题的方法了吗?谢谢

Nig*_*888 1

您可以尝试一些事情:

目录访问

检查以确保您的'C:\svn\Projects\xxx\trunk\xxx\Views\Shared\EditorTemplates'目录可供应用程序使用。

首先,确定 IIS 应用程序池分配给应用程序的用户帐户。

  1. 打开 Internet 信息服务 (IIS) 管理器。
  2. 展开服务器名称。
  3. 扩张Sites
  4. 单击包含相关站点的节点。
  5. 单击Basic Settings...右侧窗格中的链接。
  6. 记下右上角框中的应用程序池名称,然后单击Cancel
  7. 单击Application Pools左侧窗格中的节点。
  8. 找到具有步骤 6 中的名称的应用程序池,然后检查“身份”字段中的值。

现在,身份可以是内置帐户(例如 NetworkService、LocalSystem、LocalService 或 ApplicationPoolIdentity),也可以是本地或域用户(如果您使用的是 Active Directory)。

如果是本地或域用户,只需'C:\svn\Projects\xxx\trunk\xxx\Views\Shared\EditorTemplates'在Windows资源管理器中打开该目录,右键单击它,然后选择属性。单击“安全”选项卡,并确保该用户位于列表中。如果没有,请单击Edit...,然后单击Add...,将用户添加到列表中。确保它有足够的权限来读取该目录。

如果使用内置用户,您可以将其切换为本地用户,或者查看此答案以获取向内置帐户添加权限的命令。

模板名称参数

特别要检查的一件事是所有视图(或您可能碰巧调用它的其他任何地方)templateName的参数。该参数应与此处的格式之一相对应。@Html.Editor()@Html.EditorFor()

最常见的用法是仅指定模板的名称。例如,如果您指定MyTemplate此字段,它将在多个目录中搜索该文件(请参阅上面的文档),以 结尾~/Views/Shared/EditorTemplates/MyTemplate.<extension>,其中扩展名将为.cshtml, .vbhtml, .aspx, 或.ascx。这是错误消息中的目录,因此您应该彻底检查这些引用。

即使您没有显式指定参数,MVC 也会使用文件名与视图模型名称匹配的约定。

文件格式

这是一个不太可能的情况,因为您的应用程序在 IIS Express 下运行,所以情况不应该如此。但是您可以尝试搜索以查看应用程序中是否有任何代码指定目录中的文件'C:\svn\Projects\xxx\trunk\xxx\Views\Shared\EditorTemplates'

如果是这样,请确保文件名

  • 不包含无效的 Windows 文件名字符。
  • 是绝对路径,或者正在调用Environment.MapPath 或Server.MapPath 来解析为绝对路径。
  • 不包含 ? 或*。
  • 没有指定文件名所在的目录。

清除临时 ASP.NET 文件

我在这里找到了潜在的答案。

您可以尝试清除与当前应用程序相关的 ASP.NET 临时文件。请注意,根据您的框架版本和位数,它们可能潜伏在几个不同的地方。

  • <Drive>:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files
  • <Drive>:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
  • <Drive>:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files
  • <Drive>:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files

如果您在 Visual Studio 中打开该项目,它不会让您删除相关文件。最终,您应该在删除文件之前关闭 Visual Studio,但我发现在第一次尝试时将其保持打开状态是确定哪个文件夹包含相关应用程序的好方法,因为您将收到一条消息,表明文件已被锁定。如果您遇到其他问题,了解该位置可能会很有用。