Azure 应用服务无法访问文件,因此甚至无法加载程序集



我目前在将 Web 应用程序部署为应用服务时遇到了一个非常奇怪的问题。我不确定我做错了什么。

我的设置

由于某些依赖关系,我有一个在.net 4.8框架下运行的 ASP.net 核心2.2(网络标准库)网站。该应用程序还作为 64 位应用服务运行。

My Web.config 将 ANCM 配置为将输出可执行文件作为 OutOfProcess 运行:

<?xml version="1.0" encoding="utf-8"?>
<configuration>    
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".MyWebsite.exe" stdoutLogEnabled="true" stdoutLogFile=".logsstdout" hostingModel="OutOfProcess" />
</system.webServer>
</configuration>

将应用程序部署到本地 IIS 时,此设置工作正常。

我的问题

在启动时将同一应用程序作为应用服务部署到 Azure 时,应用程序声称它无法加载某些程序集。抛出FileNotFoundException和 FusionLog 错误说明0x80070002 Failed to complete setup of assembly

经过长时间的调查,我可以将问题缩小到一个主要问题:

不允许MyWebsite.exe从网站部署在 Azure 中的C:homesitewwwroot文件中读取任何数据。我可以通过尝试简单地读取工作目录中的任何文件(例如位于exe旁边的exe.config)来证明这一点。

同样在FusionLog中,我可以看到一个错误,声称它无法加载exe.config。

这会导致我的应用程序无法加载它附带的任何 DLL 的问题,因为不允许文件访问。

重要的是要知道:如果我从 Kudo 控制台启动我的应用程序,它会启动正常。

更新:我在应用程序中添加了一堆额外的检查,它变得更加疯狂。可以在此要点中找到一些源见解和日志输出。

  • 当我检查目录权限时,一切都很好。
  • 当我列出所有文件时,我可以看到所有文件
  • 当我检查文件存在和权限时,一切都很好。
  • 加载文件大小等文件信息也可以。
  • 但是一旦我尝试加载文件的字节,我就会得到一个FileNotFoundException.

更新#2:我准备了一个示例项目供大家试用。只需按照此 Git 存储库中的步骤操作:https://github.com/Danielku15/AzureFileNotFound

我的问题

如何确保我的应用程序可以访问它附带的文件?是否有特殊的部署设置或 web.config 选项,这对 Azure 中的操作很重要?

在这种情况下,问题似乎既不是 Azure,也不是我的代码。这是我用来部署应用的工具。

当我通过 JetBrains Rider 部署我的应用程序时,我遇到了上述问题,如果我通过 Visual Studio 2022 部署它,应用程序启动正常。我还不太明白这两者之间的区别,但莱德正在做一些非常错误的事情。

我开始怀疑 Rider,因为即使是具有标准设置的全新 .net 5 应用程序也无法运行。

因此,通过使用Visual Studio进行部署,为我解决了这个问题。

最新更新