【发布时间】:2012-02-06 09:21:41
【问题描述】:
在我从事 MVC3 项目的最后几个月里,我在 razor 视图上遇到随机访问被拒绝错误。在大多数情况下,我没有对视图进行任何更改,在最近的情况下,MVC 项目也没有更改。
mvc 应用程序托管在 Azure 中,只有在开发结构中运行时才会出现拒绝访问错误。如果我要发布到云端,则可以访问这些页面。
我没有任何重现此内容的步骤。一旦发生这种情况,我发现修复它的唯一方法是按照以下步骤操作:
- 从受影响的页面复制标记。
- 删除文件
- 创建一个名称稍有不同的新视图
- 将标记粘贴到新文件中
- 重建
- 将文件重命名为旧名称
我在站点运行时查看了 IIS 管理器,似乎受影响的文件存在并且与其他未受影响的文件具有相同的权限。
什么给了?
更新:我刚刚在同一个解决方案中遇到了与 WCF 服务 (.svc) 相同的问题(尽管项目与 MVC 项目不同)。这次重新创建文件的技巧没有奏效。我将代码从颠覆中检查到一个新的工作目录,现在它又可以工作了。这必须与 IIS 或 Azure Compute Emulator 相关。
异常看起来像这样...
System.UnauthorizedAccessException:访问路径 'C:\Users\Brett\App\Working\trunk\Project.Web\Views\Assignments\_Assignment.cshtml' 被拒绝。
生成:格林威治标准时间 2012 年 1 月 9 日星期一 20:55:00
System.UnauthorizedAccessException:访问路径 'C:\Users\Brett\App\Working\trunk\Project.Web\Views\Assignments\_Assignment.cshtml' 被拒绝。在 System.IO.__Error.WinIOError(Int32 错误代码,字符串 MaybeFullPath) 在 System.IO.FileStream.Init(String path, FileMode 模式、FileAccess 访问、Int32 权限、Boolean userRights、FileShare 共享,Int32 bufferSize,FileOptions 选项,SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
在 System.IO.FileStream..ctor(字符串路径,FileMode 模式,FileAccess 访问、FileShare 共享、Int32 bufferSize、FileOptions 选项、字符串 msgPath, Boolean bFromProxy) 在 System.IO.FileStream..ctor(String 路径、FileMode 模式、FileAccess 访问、FileShare 共享)在 System.Web.Hosting.MapPathBasedVirtualFile.Open() 在 System.Web.Compilation.BuildProvider.OpenReader(虚拟路径 虚拟路径)在 System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode()
在 System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType() 在 System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider)
我截断了堆栈跟踪,它非常大。如果有人想要剩下的,我可以提供。
【问题讨论】:
-
您的 AssignmentsController 是什么样的?或者任何控制器使用此页面并使其崩溃?
-
您是通过 IIS 访问本地版本,还是只是点击运行按钮并最终到达 127.0.0.1:81
-
我正在通过托管在 azure dev fabric 中的端点访问它。
标签: asp.net-mvc-3 razor azure