[英]Resolving package dependencies in a .NET project
将 Logz.io log4net 插件 ( Logzio.DotNet.Log4net
) 添加到我的 .NET 项目后,我遇到了问题:
log4net:ERROR Failed to find type [log4net.Layout.SerializedLayout, log4net.Ext.Json]
System.IO.FileLoadException: Could not load file or assembly 'log4net, Version=2.0.9.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)
File name: 'log4net, Version=2.0.9.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a'
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, StackCrawlMarkHandle stackMark, ObjectHandleOnStack assemblyLoadContext, Boolean loadTypeFromPartialName, ObjectHandleOnStack type, ObjectHandleOnStack keepalive)
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark, AssemblyLoadContext assemblyLoadContext, Boolean loadTypeFromPartialName)
at System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
at System.Type.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase)
at log4net.Util.SystemInfo.GetTypeFromString(Assembly relativeAssembly, String typeName, Boolean throwOnError, Boolean ignoreCase)
at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.CreateObjectFromXml(XmlElement element, Type defaultTargetType, Type typeConstraint)
log4net:ERROR Failed to create object to set param: layout
log4net:ERROR Could not create Appender [LogzioAppender] of type [Logzio.DotNet.Log4net.LogzioAppender, Logzio.DotNet.Log4net]. Reported error follows.
System.IO.FileLoadException: Could not load file or assembly 'log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)
File name: 'log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a'
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, StackCrawlMarkHandle stackMark, ObjectHandleOnStack assemblyLoadContext, Boolean loadTypeFromPartialName, ObjectHandleOnStack type, ObjectHandleOnStack keepalive)
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark, AssemblyLoadContext assemblyLoadContext, Boolean loadTypeFromPartialName)
at System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
at System.Type.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase)
at log4net.Util.SystemInfo.GetTypeFromString(Assembly relativeAssembly, String typeName, Boolean throwOnError, Boolean ignoreCase)
at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement)
简而言之, [log4net.Layout.SerializedLayout, log4net.Ext.Json]
请求 log4net 版本2.0.9.0
,而[Logzio.DotNet.Log4net.LogzioAppender, Logzio.DotNet.Log4net]
请求 log4net 版本2.0.12.0
所以在这种情况下,我清楚地理解了问题,但不知道如何解决它。 我以前从未见过这种情况,通常,NuGet 本身就做得很好。
理想情况下,让两者都使用 log4net 2.0.13.0
会很棒,这是本文发布时的最新版本,但我很高兴学习如何解决这个问题。
有什么想法或解决方案吗? 谢谢!
更新到最新版本将解决该问题,因为当 Logz.io 不接受向后兼容性时,至少需要 log4net 版本2.0.12.0
。
几天前,我也遇到了类似的问题,而大多数软件包在 ms vs 2022 最终版本之后都在更新!
发布后几分钟就理所当然地想出来了。 诀窍是信任 NuGet。 不知何故,通过我的修补,我得到了混淆的版本。 所以解决方案如下:
Manage NuGet Packages
log4net
、 log4net.Ext.Json
和Logzio.DotNet.Log4net
.csproj
文件)正在运行:<PackageReference Include="log4net.Ext.Json" Version="2.0.10.1" />
<PackageReference Include="log4net" Version="2.0.13" />
<PackageReference Include="Logzio.DotNet.Log4net" Version="1.0.13" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.