【问题标题】:log4net Package Dependency Issues - Version 2.0.9.0 and 2.0.12.0log4net 包依赖问题 - 版本 2.0.9.0 和 2.0.12.0
【发布时间】:2022-01-01 19:52:57
【问题描述】:

在将 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 会很棒,这是本文发布时的最新版本,但我很乐意学习如何解决这个问题。

有什么想法或解决方案吗?谢谢!

【问题讨论】:

    标签: c# asp.net-core .net-core nuget nuget-package


    【解决方案1】:

    更新到最新版本将解决问题,因为当 Logz.io 不接受向后兼容性时,需要最低 log4net 版本2.0.12.0

    几天前我也遇到了类似的问题,而大多数软件包在 ms vs 2022 最终版本之后都在更新!

    【讨论】:

    • 确实这似乎是问题之一!虽然我认为它更复杂,因为我有一个混合版本的log4net.Ext.Json
    【解决方案2】:

    在发布后几分钟理所当然地想通了。诀窍信任 NuGet。不知何故,通过我的修补,我得到了混淆的版本。所以解决方案如下:

    1. 右键解决方案->Manage NuGet Packages
    2. 卸载log4netlog4net.Ext.JsonLogzio.DotNet.Log4net
    3. 重新安装所有三个。 NuGet 将采用最新的兼容版本,正如@yasir-arafat 所提到的,至少对于 Logzio 包来说,它是解决冲突所必需的。最后,我可以确认以下配置(来自我的.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" />
    

    更新:如下所述,这并不总是有效。我试过这个app.config,但它不起作用:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <runtime>
            <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
                <dependentAssembly>
                    <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
                    <bindingRedirect oldVersion="0.0.0.0-2.0.13.0" newVersion="2.0.12.0" />
                </dependentAssembly>
                <dependentAssembly>
                    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
                    <bindingRedirect oldVersion="0.0.0.0-13.0.0.1" newVersion="13.0.0.0" />
                </dependentAssembly>
            </assemblyBinding>
        </runtime>
    </configuration>
    

    如果我完全删除我的 docker 容器并且没有 app.config,我的项目似乎构建成功。

    我正在继续调查。

    【讨论】:

    • 更新:仍在调查一个活跃的问题,我认为它已解决,但有时在构建过程中它会中断,某些包正在请求 log4net 版本 2.0.9.0 我会在我弄清楚时报告
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 2013-07-08
    相关资源
    最近更新 更多