Rui*_*Rui 9 c# serilog azure-functions .net-6.0
尝试从 Azure Function 中的 IConfiguration 设置 Serilog 时,出现以下错误。
无法加载文件或程序集“Microsoft.Extensions.DependencyModel,Version=3.0.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60”。该系统找不到指定的文件。
该错误是在运行时抛出的:
var loggerConfiguration = new LoggerConfiguration().ReadFrom.Configuration(Configuration);
我的启动类如下所示:
public class Startup : FunctionsStartup
{
public IConfiguration Configuration { get; set; }
public override void Configure(IFunctionsHostBuilder builder)
{
Configuration = builder.GetContext().Configuration;
(...)
var loggerConfiguration = new LoggerConfiguration().ReadFrom.Configuration(Configuration);
var logger = loggerConfiguration.CreateLogger();
builder.Services.AddLogging(lb => lb.AddSerilog(logger));
}
}
Run Code Online (Sandbox Code Playgroud)
我可以在项目的依赖项中看到 Microsoft.Extensions.DependencyModel(3.0.0) 依赖项,作为 Serilog.Settings.Configuration(3.3.0) 的子依赖项。
我可以对 Serilog 配置进行硬编码,并使其与 MSSqlServer 接收器一起工作,但重点是通过简单的设置更改来配置此功能。
我正在使用 .net6 和 azure 函数 v4。
编辑:添加 .csproj 示例
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="5.1.0" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.0.1" />
<PackageReference Include="Serilog.Settings.Configuration" Version="3.3.0" />
<PackageReference Include="Serilog.Sinks.MSSqlServer" Version="5.6.1" />
</ItemGroup>
(...)
Run Code Online (Sandbox Code Playgroud)
Startup.cs 中的用法:
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Serilog;
using System.Reflection;
using Microsoft.Extensions.Logging;
(...)
Other project references and company libs
(...)
Run Code Online (Sandbox Code Playgroud)
我遇到过这个问题,发现如果我保留Microsoft.NET.Sdk.Functions对 3.0.03 的依赖,即使使用 .net6 和 Azure Functions V4,它也能正常工作。
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.03" />