将 IISLocal(适用于 IISExpression)与 ASP.NET MVC 一起使用时出现奇怪的异常

Posted

技术标签:

【中文标题】将 IISLocal(适用于 IISExpression)与 ASP.NET MVC 一起使用时出现奇怪的异常【英文标题】:Weird exception when using IISLocal (works on IISExpression) with ASP.NET MVC 【发布时间】:2015-03-13 15:42:57 【问题描述】:

我正在开发一个使用 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.

我刚刚在谷歌上搜索过,有人建议在 Debug->Exception 下禁用 throw exception 复选框,但如果我这样做,我不会显示视图,因为输出只是 javascript...

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

【问题讨论】:

这里有一篇文章建议了一个有效的解决方法***.com/questions/3925689/… Varun 我刚刚读到了……但即使我禁用了异常它也不起作用 您是使用发布到文件系统部署它还是将 IIS 网站设置为您的 Web 项目的目录? 不,正在调试中...设置为本地 iis 时无法调试 @advapi 您绝对可以在使用本地 IIS 时进行调试。它在需要一点工作的远程 IIS 上进行调试,但它也是可行的。您是否尝试在本地 IIS 下调试您的项目并且有任何问题?如果您有任何权限问题,可能是同样的问题阻止您运行您的网站 【参考方案1】:

你可以尝试一些事情:

目录访问

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

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

    打开 Internet 信息服务 (IIS) 管理器。 扩展服务器名称。 展开Sites。 单击包含相关站点的节点。 点击右侧窗格中的Basic Settings... 链接。 记下右上角的应用池名称,点击Cancel。 单击左侧窗格中的Application Pools 节点。 使用第 6 步中的名称查找应用程序池,并检查 Identity 字段中的值。

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

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

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

模板名称参数

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

最常见的用法是仅指定模板的名称。例如,如果您为此字段指定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 临时文件

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

【讨论】:

我刚刚试了下……删除了那些文件还是不行

以上是关于将 IISLocal(适用于 IISExpression)与 ASP.NET MVC 一起使用时出现奇怪的异常的主要内容,如果未能解决你的问题,请参考以下文章

IISExpress 日志文件位置

WiX 3.8安装IIS Express和SQL Server LocalDB 2012

IIS Express 8 - 无法写入配置文件

什么是 Kestrel(与 IIS / Express 相比)

IISExpress AppPool 身份验证

配置IISExpress允许外部访问