无法在 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
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
这是一个重复的问题,但不知道在这个解决方案场景中会发生什么,我们正在.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
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