【发布时间】:2022-01-14 14:19:54
【问题描述】:
我将 Web 应用程序从 .NET CORE 5 迁移到 .NET CORE 6。当应用程序启动时,我在 Windows 事件查看器中收到一条错误消息,指出它找不到 System.Diagnostics.EventLog Version= 6.0.0.0...
全栈:
Application: w3wp.exe
CoreCLR Version: 6.0.21.52210
.NET Version: 6.0.0
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException: Could not load file or assembly 'System.Diagnostics.EventLog, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified.
File name: 'System.Diagnostics.EventLog, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'
at Microsoft.Extensions.Logging.EventLog.EventLogSettings.CreateDefaultEventLog
at Microsoft.Extensions.Logging.EventLog.EventLogSettings.get_EventLog
at Microsoft.Extensions.Logging.EventLog.EventLogLogger..ctor(String name, EventLogSettings settings, IExternalScopeProvider externalScopeProvider)
at Microsoft.Extensions.Logging.EventLog.EventLogLoggerProvider.CreateLogger(String name)
at Microsoft.Extensions.Logging.LoggerFactory.CreateLoggers(String categoryName)
at Microsoft.Extensions.Logging.LoggerFactory.CreateLogger(String categoryName)
at Microsoft.Extensions.Logging.Logger`1..ctor(ILoggerFactory factory)
at System.RuntimeMethodHandle.InvokeMethod(Object target, Span`1& arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Type serviceType)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Microsoft.Extensions.Hosting.HostBuilder.<CreateServiceProvider>b__28_2(IServiceProvider _)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Type serviceType)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Microsoft.Extensions.Hosting.HostBuilder.Build()
at MyApp.Web.Program.Main(String[] args) in F:\MyApp\web\MyAppWeb\Program.cs:line 16
我什至尝试将 System.Diagnostics.EventLog 添加为来自 nuget 的包,我认为这可能会起作用,但它没有...
跑步:
OS: Windows 10 build 19044.1348
IIS: 10.0.19041.1
我还在我的 app.config 中添加了这个以尝试强制使用旧版本:
<runtime>
<assemblyBinding>
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.EventLog"
publicKeyToken="cc7b13ffcd2ddd51"
culture="neutral" />
<bindingRedirect oldVersion="6.0.0.0" newVersion="5.0.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
它仍然给出同样的错误,试图找到 6.0.0.0。
这是我安装的所有软件包:
System.Diagnostics.EventLog {6.0.0}
System.Drawing.Common {6.0.0}
Microsoft.Extensions.Logging.Abs... {6.0.0}
Syncfusion.Licensing {19.3.0.57}
System.Security.Principal.Windows {5.0.0}
Syncfusion.EJ2.AspNet.Core {19.3.0.57}
Microsoft.Extensions.Configurati... {6.0.0}
Newtonsoft.Json {13.0.1}
Microsoft.jQuery.Unobtrusive.Ajax {3.2.6}
Microsoft.Extensions.Configurati... {6.0.0}
Microsoft.Extensions.Configurati... {6.0.0}
Microsoft.AspNetCore.Mvc.Newtons... {6.0.0}
Microsoft.Extensions.Configurati... {6.0.0}
Microsoft.AspNet.Mvc {5.2.7}
Syncfusion.EJ.AspNet.Core {19.3.0.57}
Microsoft.Extensions.PlatformAbs... {1.1.0}
System.Data.SqlClient {4.8.3}
Microsoft.AspNetCore.Session {2.2.0}
Microsoft.Extensions.Configuration {6.0.0}
Syncfusion.Pdf.Net.Core {19.3.0.57}
Microsoft.Extensions.Primitives {6.0.0}
Twilio {5.68.2}
Microsoft.Extensions.Logging {6.0.0}
morelinq {3.3.2}
另外,当我查看服务器上的输出文件夹时,我确实看到了 System.Diagnostics.EventLog:
有什么建议吗?
谢谢!
【问题讨论】:
-
我很确定 .NET 6 不使用绑定重定向,所以添加
web.config应该不会有什么不同。你检查过应用程序文件夹吗?似乎缺少System.Diagnostics.EventLog.dll。这就是你需要解决的问题。 -
是的,我确实在应用程序文件夹中看到了 System.Diagnostics.EventLog.dll...
-
你仍然会得到一个
FileNotFoundException,所以你需要追逐它。文件名错误(不太可能)?那么错误的目录呢?您的应用程序正在尝试加载文件,但该文件丢失。由于 Fusion Log 未在“现代”.NET 中使用,因此您可以深入并使用 Process Explorer 之类的工具来准确查看您的应用程序试图加载的文件。 -
呃,我刚刚想通了...我的软件包列表中还有 Microsoft.AspNet.Mvc 5.2.7,它正在拉入旧版本的 System.Diagnostics.EventLog。一旦我删除它,它就开始工作了......感谢您的帮助!!!