【发布时间】:2020-04-03 16:49:55
【问题描述】:
我们将 ASP.NET Core 3.0 Web 应用程序部署到 Azure Web Apps。为了获取日志消息,我们想使用Azure Web Apps diagnostics。我们在 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 项目中,我们成功设置了日志记录,即使我们镜像了更大解决方案的一些细节;我们验证了以下特征不会阻止测试应用程序成功登录:
- Run from package 一开始并没有设置(我们直接从 Visual Studio 部署了测试应用程序),但是我们创建了一个构建过程来部署带有 Run from package 设置的包。所以一般的构建和发布过程是相同的。
- 我们从较大的项目中复制了 web.config(经过调整以将日志消息保存到标准输出)
- 我们在项目之间复制了 program.cs 的内容,因此创建虚拟主机的代码是相同的。
是否有人知道这种行为的原因或我们可以用来获取更多详细信息的其他步骤?
异常详情
未处理的异常。 System.IO.FileNotFoundException:读取错误 D:\home\site\diagnostics\ 目录。
在 System.IO.FileSystemWatcher.StartRaisingEvents()
在 System.IO.FileSystemWatcher.StartRaisingEventsIfNotDisposed()
在 System.IO.FileSystemWatcher.set_EnableRaisingEvents(Boolean 值)
在 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(Func1 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 建设者)
在 sevacation.Program.c.b__1_0(ILoggingBuilder 记录)在 D:\a\1\s\sevacation\Program.cs:line 22
在 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()
在 sevacation.Program.Main(String[] args) 中 D:\a\1\s\sevacation\Program.cs:第 17 行
【问题讨论】:
-
你使用zip部署吗?
-
@FalcoAlexander 是的,包是从 Azure Pipelines 以 zip 格式部署的(在 Azure Web 应用程序中设置了 Run_From_Package)。但是对于测试应用程序,zip 部署并没有引发失败。
-
@FalcoAlexander 感谢您的提示,我将检查从 VS 部署是否可以解决问题。
-
@FalcoAlexander 您链接的问题似乎是原因。使用 WebDeploy 而不是从包中运行可以修复它。如果您提供答案,我很乐意接受。
标签: c# azure asp.net-core azure-webapps