无法在 Worker Service 中加载程序集(.Net Core3.1 和 NLog 4.9.2)

Unable to Load Assembly in Worker Service (.Net Core3.1 and NLog 4.9.2)

这是一个重复的问题,但不知道在这个解决方案场景中会发生什么,我们正在.Net core 3.1中设置一个WorkerService。对于日志记录,我们使用 NLog。构建时出现错误:

System.IO.FileNotFoundException: 'Could not load file or assembly 'NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c'. The system cannot find the file specified.'

此错误发生在 Project.cs(如下面的代码所示)。 ServiceFileLogger 属于另一个库 Class。(文件夹结构如下所示)

Project.cs

public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
           .UseWindowsService()

                .ConfigureServices((hostContext, services) =>
                {
                    IConfiguration config = hostContext.Configuration;

                    services.AddSingleton<IConfiguration>(config);
                    services.AddSingleton<ServiceSettings>(config.GetSection("Application").Get<ServiceSettings>());
// Error comes here during the injection.                    
services.AddTransient<ServiceFileLogger>(_logger=> new ServiceFileLogger("DATASOURCEMONITOR", config.GetSection("Application:LogLevel").ToString()));

                    services.AddHostedService<Worker>();
                });
    }
}
                 

我们甚至将 Nlog version 4.9.2 更改为 NLog version 4.9.0 () 更多信息

<Project Sdk="Microsoft.NET.Sdk.Worker">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <UserSecretsId>dotnet-WorkerServiceLearn-817A165A-A227-4F73-ABBC-EE79E10DE8A3</UserSecretsId>
    <ApplicationIcon />
    <OutputType>Exe</OutputType>
    <StartupObject />
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.5" />
    <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="3.1.5" />
    <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.7.0" />
  </ItemGroup>

  <ItemGroup>
    <Reference Include="WorkerServiceLearn.Library">
      <HintPath>..\WorkerServiceLearn.Library\bin\Debug\netcoreapp3.1\WorkerServiceLearn.Library.dll</HintPath>
    </Reference>
  </ItemGroup>
</Project>

不知道这里要改什么,请帮助我们并提供一些文件来验证。

资源库Link在这里,请浏览并给我们建议。

您还必须使用 Nuget 包管理器或 运行 包管理器控制台中的以下命令来安装 NLog。

Install-Package NLog -Version 4.7.2

参考:https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-3#1-add-dependency-in-csproj-manually-or-using-nuget

NLog 对我来说是这样的:

WorkerServiceLearn 项目中:

  • 添加 Nuget 包:Nlog

  • 添加 Nuget 包:NLog.Extensions.Logging

  • 添加一个“nlog.config”文件

  • 在代码中声明NLog服务:

      return Host.CreateDefaultBuilder(args)
             .ConfigureServices((hostContext, services) =>
              {
                  var config = hostContext.Configuration;
    
                  services.AddLogging(loggingBuilder =>
                  {
                      // Microsoft.Extensions.Logging;
                      loggingBuilder.ClearProviders();
                      loggingBuilder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Debug);
    
                      // NLog.Extensions.Logging
                      loggingBuilder.AddNLog(config);
                  });
    

WorkerServiceLearnLibrary 项目中:

  • 去掉NLog.Web.AspNetCore(我个人不用)
  • 添加 Nuget 包:NLog