c# - Azure Web 应用程序上的 ASP.NET Core,添加 Azure Web 应用程序诊断会在启动时引发 FileNotFoundException
问题描述
我们将 ASP.NET Core 3.0 Web 应用程序部署到 Azure Web Apps。为了获取日志消息,我们想使用Azure Web Apps 诊断。我们在 program.cs 中添加日志记录提供程序:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging => logging.AddAzureWebAppDiagnostics())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
但是,在应用程序启动时,将 FileNotFoundException 记录到标准输出(有关详细信息和堆栈跟踪,请参见下文)并且应用程序无法启动(状态代码 500.30)。
我们采取了以下步骤来查找原因,但到目前为止,我们还没有成功:
- 我们使用了 Kudu 并断言该目录存在。目录中的 settings.json 文件模仿了我们在日志配置中设置的设置。
- 此外,我们在 program.cs 中添加了对 Directory.Exists 的调用,以验证目录是否存在。这也返回了 true。
- 我们在同一个应用服务计划中用相同的设置重新创建了同名的 Azure Web App;应用程序无法启动。
- 在一个新创建的 ASP.NET Core 3.0 项目中,我们成功设置了日志记录,即使我们镜像了更大解决方案的一些细节;我们验证了以下特征不会阻止测试应用程序成功登录:
- 从包运行一开始并没有设置(我们直接从 Visual Studio 部署了测试应用程序),但是我们创建了一个构建过程,该过程使用从包集运行来部署一个包。所以一般的构建和发布过程是相同的。
- 我们从较大的项目中复制了 web.config(经过调整以将日志消息保存到标准输出)
- 我们在项目之间复制了 program.cs 的内容,因此创建 Web 主机的代码是相同的。
有谁知道这种行为的原因或我们可以用来获取更多详细信息的其他步骤?
异常详情
未处理的异常。System.IO.FileNotFoundException:读取 D:\home\site\diagnostics\ 目录时出错。
在 System.IO.FileSystemWatcher.StartRaisingEvents()
在 System.IO.FileSystemWatcher.StartRaisingEventsIfNotDisposed()
在 System.IO.FileSystemWatcher.set_EnableRaisingEvents(布尔值)
在 Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.TryEnableFileSystemWatcher()
在 Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.CreateFileChangeToken(字符串过滤器)
在 Microsoft.Extensions.FileProviders.PhysicalFileProvider.Watch(字符串过滤器)
在 Microsoft.Extensions.Configuration.FileConfigurationProvider.<.ctor>b__1_0()
在 Microsoft.Extensions.Primitives.ChangeToken.ChangeTokenRegistration
1..ctor(Func
1 changeTokenProducer,Action`1 changeTokenConsumer,TState 状态)在 Microsoft.Extensions.Primitives.ChangeToken.OnChange(Func`1 changeTokenProducer, Action changeTokenConsumer)
在 Microsoft.Extensions.Configuration.FileConfigurationProvider..ctor(FileConfigurationSource 源)
在 Microsoft.Extensions.Configuration.Json.JsonConfigurationSource.Build(IConfigurationBuilder 生成器)
在 Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
在 Microsoft.Extensions.Logging.AzureAppServices.SiteConfigurationProvider.GetAzureLoggingConfiguration(IWebAppContext 上下文)
在 Microsoft.Extensions.Logging.AzureAppServicesLoggerFactoryExtensions.AddAzureWebAppDiagnostics(ILoggingBuilder 生成器,IWebAppContext 上下文)
在 Microsoft.Extensions.Logging.AzureAppServicesLoggerFactoryExtensions.AddAzureWebAppDiagnostics(ILoggingBuilder 生成器)
在 D:\a\1\s\sevacation\Program.cs:line 22 中的 sevacation.Program.<>c.b__1_0(ILoggingBuilder 日志记录)
在 Microsoft.Extensions.Hosting.HostingHostBuilderExtensions.<>c__DisplayClass5_0.b__1(ILoggingBuilder 生成器)
在 Microsoft.Extensions.DependencyInjection.LoggingServiceCollectionExtensions.AddLogging(IServiceCollection 服务,Action`1 配置)
在 Microsoft.Extensions.Hosting.HostingHostBuilderExtensions.<>c__DisplayClass5_0.b__0(HostBuilderContext 上下文,IServiceCollection 集合)
在 Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider()
在 Microsoft.Extensions.Hosting.HostBuilder.Build()
在 D:\a\1\s\sevacation\Program.cs:line 17 中的 sevacation.Program.Main(String[] args)
解决方案
.zip 部署似乎存在当前问题(截至 2019 年 12 月)
尝试使用不同的部署方法,例如 WebDeploy、Git 等。
推荐阅读
- powershell - 从 (get-help computer).moduleName 获得独特的结果
- testing - Cypress 等待所有 ajax 请求 cy.wait('" ") 的解决方案
- c - 在 C 中使用函数指针调用函数时是否会获取堆栈帧?
- javascript - 一次单击特定元素时如何跳过操作?
- c# - 使用 ILoggerFactory / ILoggingBuilder 时 NLog 设置自定义记录器命名空间后缀
- python - python点云过滤与numpy
- javascript - react-native iOS 调用本地主机模拟服务器不透明响应
- reactjs - 如果已经在 reactjs 中进行了身份验证,则将用户重定向到仪表板
- c++ - 我可以在 C++ 中做的不仅仅是“x++”或“x--”吗?
- amazon-web-services - 如何在 AWS Cloudfront 中启用浏览器缓存