Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的应用在Windows 4月更新后停止提供静态文件_C#_.net_Asp.net Mvc_Iis Express_Static Files - Fatal编程技术网

C# 我的应用在Windows 4月更新后停止提供静态文件

C# 我的应用在Windows 4月更新后停止提供静态文件,c#,.net,asp.net-mvc,iis-express,static-files,C#,.net,Asp.net Mvc,Iis Express,Static Files,我有一个应用程序,其中内容文件夹由另一个构建前端应用程序的进程填充,而VisualStudio项目本身不知道文件夹中有什么。我使用标准的节点和设置web.config。我用routes.IgnoreRoute(“content/*”)设置了RouteConfig 该应用程序通常使用IIS Express运行,但我也使用IIS本身运行它 直接从content文件夹加载js、css和其他静态文件,这一切都很好。也就是说,直到我安装了Windows四月更新。现在,每个静态文件请求都会导致404。如果我

我有一个应用程序,其中内容文件夹由另一个构建前端应用程序的进程填充,而VisualStudio项目本身不知道文件夹中有什么。我使用标准的
节点和
设置web.config。我用
routes.IgnoreRoute(“content/*”)设置了RouteConfig

该应用程序通常使用IIS Express运行,但我也使用IIS本身运行它

直接从content文件夹加载js、css和其他静态文件,这一切都很好。也就是说,直到我安装了Windows四月更新。现在,每个静态文件请求都会导致404。如果我尝试转到请求的物理路径(但通过Exporer),我将获得该文件。文件在那里。当我部署应用程序时,它可以在Azure上工作,所以它必须是本地的

以下是我尝试过的:

  • 卸载IIS管理器和IIS Express,从
    c:\inetpub\temp\appPools
    中删除应用池,然后重新安装IIS Express
  • 删除staticContent节点并将runAllManagedModulesForAllRequests设置为false
  • 授予项目文件夹和子文件夹中“所有人”的完全访问权限
  • 关闭UAC
可能是什么?我不知道在Windows更新之后如何继续工作。

更新过程似乎以某种方式损坏了我的IIS安装。我执行了Windows刷新,安装了所有工具,并关闭了我的应用程序,效果很好

这不是一个快速或简单的修复方法,但几小时后我又恢复了正常运行

我发现了实际问题以及如何解决它

Windows April Update添加了一个漂亮的功能,可以为特定文件夹设置大小写敏感度。他们还使使用Linux子系统创建的任何文件夹在默认情况下都具有大小写敏感性。默认情况下,对cmd.exe或powershell.exe执行相同操作时会关闭大小写敏感度

我的应用程序的客户端部分使用node/webpack构建,并放入.Net应用程序的内容文件夹中。当我进行Windows刷新时,我最初使用cmd.exe构建了我的应用程序,并且运行良好。在打开Linux子系统并使用bash构建应用程序之后,我又开始在Content文件夹中的所有文件上获取404。ProcMon.exe告诉我失败的文件是大写的(即,如果文件是modernizr.min.js,IIS试图打开modernizr.min.js)。我不知道为什么IIS试图加载一个所有大写字母的文件,除了IIS缓存文件时使用所有大写字母之外

一些解决方案 选项1:不要使用Linux子系统或区分大小写的文件夹。 此问题似乎仅在IIS为启用区分大小写的文件夹中的文件提供服务时才会发生,默认情况下,在Linux子系统中创建的文件夹会发生这种情况

选项2:将Linux子系统的Windows默认设置为用例不敏感。 编辑/etc/wsl.conf(如果不存在则创建),并添加以下内容:

[automount]
options="case=off"
您需要退出终端并再次启动它,才能进行更改。以前在bash中创建的任何文件夹都需要设置其标志,或者删除并重新创建

选项3:更新每个文件夹的区分大小写标志。 这可以作为构建脚本的一部分添加,或者如果不需要重复执行,可以手动完成。您需要先设置执行策略才能运行powershell脚本

Set-ExecutionPolicy remoteSigned
Powershell脚本(FixFolders.ps1):

此脚本将禁用指定文件夹(或当前文件夹)和所有子文件夹的区分大小写功能

FixFolders.ps1
将在当前文件夹和所有子文件夹上运行

FixFolders.ps1 c:\dev
将在c:\dev和所有子文件夹上运行

param (
    [string]$root = $( Get-Location )
)

if ( Test-Path $root ) {

    $rootPath = $( Get-Item -Path $root )

    fsutil file setCaseSensitiveInfo $rootPath disable
    foreach ($path in Get-ChildItem -Path $rootPath -Directory -Recurse) {
        fsutil file setCaseSensitiveInfo $path.FullName disable
    }
}