Azure App Service .net6 Deploy - Error: EISDIR: illegal operation on a directory, open '/home/site/wwwroot/wwwroot/Identity/lib/bootstrap/LICENSE'

Azure App Service .net6 Deploy - Error: EISDIR: illegal operation on a directory, open '/home/site/wwwroot/wwwroot/Identity/lib/bootstrap/LICENSE'

我将我的 Asp.net 核心 Blazor WebAssembly 应用程序更新到 .net 6。一切都很好,但是从 github 操作部署不起作用并抛出此错误:

...
Copying file: 'Microsoft.AspNetCore.ApiAuthorization.IdentityServer.dll'
Copying file: 'Microsoft.AspNetCore.Authentication.JwtBearer.dll'
Omitting next output lines...
Error: EISDIR: illegal operation on a directory, open '/home/site/wwwroot/wwwroot/Identity/lib/bootstrap/LICENSE'
An error has occurred during web site deployment.
Kudu Sync failed
\n/opt/Kudu/Scripts/starter.sh "/home/site/deployments/tools/deploy.sh"
Error: Failed to deploy web package to App Service.
Error: Deployment Failed with Error: Package deployment using ZIP Deploy failed. Refer logs for more details.

这里可能有什么问题?

EDIT/SOLUTION:

以前许可证文件的路径是:/home/site/wwwroot/wwwroot/Identity/lib/bootstrap/LICENSE/LICENSE 新文件没有 LICENSE 目录。因此,当新版本的应用程序到达时,它会尝试更新 LICENSE 文件,该文件实际上是一个目录。删除 LICENSE/LICENSE 有帮助。

  • 在 Linux 上,获得 运行 的任何 bash 部署脚本具有 Unix 行结尾 (LF) 而不是 Windows 行很重要结尾 (CRLF)。

  • Kuduscript 将生成具有适合平台的行尾的脚本,但如果这些脚本被修改,或者如果您提供自己的 custom deployment scripts,请务必确保您的编辑器不会t 更改行尾。

  • 如果您的部署脚本似乎有问题,您可以随时使用 Kudu 控制台删除 /home/site/deployments/tools.

    的内容
  • 这是Kudu缓存kuduscript生成的部署脚本的目录。在下一次部署时,将重新生成脚本。

  • 您当前看到的错误是 运行ning node/npm 部署的 Kudu 问题。

  • 对于您当前看到的情况,最简单和最快的解决方案是在 package.json.

    中指定 engines.node

Error: EISDIR: illegal operation on a directory, open '/home/site/wwwroot/wwwroot/Identity/lib/bootstrap/LICENSE'

EISDIR 代表“错误,是目录”。这意味着 NPM 正在尝试对文件执行某些操作,但它是一个 目录 。在你的例子中,NPM 试图“读取”一个文件,它是一个目录。由于无法完成操作,因此抛出错误。

这里要确定三件事

  1. 确保文件存在。如果没有,则需要创建它。 (如果 NPM 依赖于文件中的任何特定信息,您将需要在该文件中包含该信息)。
  2. 确保它实际上是一个文件而不是目录。
  3. 它有正确的权限。您可以使用“sudo chmod 777 FILE_NAME”更改文件以拥有所有权限。

注意:您正在为该文件上的每个人授予读、写和执行权限。

我最后删除了 /home/site/wwwroot/ 的内容来解决这个问题。我还需要在网站配置中将配置更新为 .NET 6,并在我的网站开始工作之前重新部署。