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

时间:2015-01-15 09:22:19

标签: asp.net-mvc iis-7.5

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

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

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.

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

有人找到了解决这个问题的方法吗? 感谢

1 个答案:

答案 0 :(得分: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中的名称查找应用程序池,并检查“标识”字段中的值。
  9. 现在,Identity可以是内置帐户(例如NetworkService,LocalSystem,LocalService或ApplicationPoolIdentity),也可以是本地或域用户(如果您使用的是Active Directory)。

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

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

    templateName参数

    要检查的一件事是templateName @Html.Editor()参数@Html.EditorFor()MyTemplate在您的所有视图中(或者您可能恰好在其他任何地方调用它)。此参数应与其中一种格式here对应。

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

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

    文件格式

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

    如果是,请确保文件名

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

    清除您的临时ASP.NET文件

    我找到了一个可能的答案here

    您可以尝试清除与当前应用程序相关的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,但我发现在第一次尝试时将其保持打开状态是确定哪个文件夹包含相关应用程序的好方法,因为您将收到文件被锁定的消息。如果您有其他问题,了解该位置非常有用。