将 IISLocal(适用于 IISExpression)与 ASP.NET MVC 一起使用时出现奇怪的异常
Weird exception when using IISLocal (works on IISExpression) with ASP.NET MVC
我正在开发一个使用 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.
我刚刚在 google 上搜索,有人建议在 Debug->Exception 下禁用抛出异常复选框,但如果我这样做,我将无法显示视图,因为输出只是 javascript...
有人找到解决这个问题的方法吗?
谢谢
您可以尝试的一些事情:
目录访问
检查以确保您的 'C:\svn\Projects\xxx\trunk\xxx\Views\Shared\EditorTemplates'
目录可供应用程序使用。
首先,确定 IIS 应用程序池分配给应用程序的用户帐户。
- 打开 Internet 信息服务 (IIS) 管理器。
- 展开服务器名称。
- 展开
Sites
.
- 单击包含相关站点的节点。
- 单击右窗格中的
Basic Settings...
link。
- 记下右上框中的应用程序池名称,然后单击
Cancel
。
- 单击左窗格中的
Application Pools
节点。
- 找到具有第 6 步中名称的应用程序池,并检查身份字段中的值。
现在,身份可以是内置帐户(例如 NetworkService、LocalSystem、LocalService 或 ApplicationPoolIdentity),也可以是本地或域用户(如果您使用的是 Active Directory)。
如果是本地或域用户,只需要在Windows资源管理器中打开'C:\svn\Projects\xxx\trunk\xxx\Views\Shared\EditorTemplates'
目录,右击它,选择属性。单击安全选项卡,并确保用户在列表中。如果不是,请单击 Edit...
,然后单击 Add...
,并将该用户添加到列表中。确保它有足够的权限读取目录。
如果使用内置用户,您可以将其切换为本地用户,或者查看 this answer 以获取向内置帐户添加权限的命令。
templateName 参数
需要特别检查的一件事是您所有视图(或您可能碰巧调用它的任何其他地方)中 @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,但我发现在第一次尝试时将其打开是确定哪个文件夹包含相关应用程序的好方法,因为您会收到一条消息,指出这些文件被锁定。如果您有其他问题,了解该位置会很有用。
我正在开发一个使用 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.
我刚刚在 google 上搜索,有人建议在 Debug->Exception 下禁用抛出异常复选框,但如果我这样做,我将无法显示视图,因为输出只是 javascript...
有人找到解决这个问题的方法吗? 谢谢
您可以尝试的一些事情:
目录访问
检查以确保您的 'C:\svn\Projects\xxx\trunk\xxx\Views\Shared\EditorTemplates'
目录可供应用程序使用。
首先,确定 IIS 应用程序池分配给应用程序的用户帐户。
- 打开 Internet 信息服务 (IIS) 管理器。
- 展开服务器名称。
- 展开
Sites
. - 单击包含相关站点的节点。
- 单击右窗格中的
Basic Settings...
link。 - 记下右上框中的应用程序池名称,然后单击
Cancel
。 - 单击左窗格中的
Application Pools
节点。 - 找到具有第 6 步中名称的应用程序池,并检查身份字段中的值。
现在,身份可以是内置帐户(例如 NetworkService、LocalSystem、LocalService 或 ApplicationPoolIdentity),也可以是本地或域用户(如果您使用的是 Active Directory)。
如果是本地或域用户,只需要在Windows资源管理器中打开'C:\svn\Projects\xxx\trunk\xxx\Views\Shared\EditorTemplates'
目录,右击它,选择属性。单击安全选项卡,并确保用户在列表中。如果不是,请单击 Edit...
,然后单击 Add...
,并将该用户添加到列表中。确保它有足够的权限读取目录。
如果使用内置用户,您可以将其切换为本地用户,或者查看 this answer 以获取向内置帐户添加权限的命令。
templateName 参数
需要特别检查的一件事是您所有视图(或您可能碰巧调用它的任何其他地方)中 @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,但我发现在第一次尝试时将其打开是确定哪个文件夹包含相关应用程序的好方法,因为您会收到一条消息,指出这些文件被锁定。如果您有其他问题,了解该位置会很有用。