求助:.NET Framework 4.6.2桌面程序无法加载指定公钥的log4net 1.2.10.0
解决方案:Crystal Reports 依赖特定公钥 log4net 的加载问题
针对你遇到的 log4net, Version=1.2.10.0, PublicKeyToken=692fbea5521e1304 找不到的问题,以下是几个可行的解决方法:
方法1:从Crystal Reports安装目录提取对应签名版本的log4net
SAP会对Crystal Reports依赖的log4net进行重新签名,这个特定公钥的版本其实包含在你安装的Crystal Reports SDK中:
- 打开Crystal Reports的安装路径,默认位置类似:
- 32位:
C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\dotnet\log4net.dll - 64位:
C:\Program Files\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win64_x64\dotnet\log4net.dll
- 32位:
- 复制该dll到你的项目目录,移除现有log4net引用,添加对这个dll的引用,并设置引用的复制本地属性为
True,确保编译后它会被复制到输出目录。
方法2:使用程序集绑定重定向+禁用强名称验证
如果不想使用SAP签名的log4net,可通过绑定重定向让Crystal Reports调用你现有版本的log4net,同时绕过强名称验证:
- 在项目的
app.config中添加以下绑定重定向配置:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="log4net" publicKeyToken="692fbea5521e1304" culture="neutral"/> <bindingRedirect oldVersion="1.2.10.0" newVersion="你当前安装的log4net版本(比如2.0.15.0)" publicKeyToken="669e0ddf0bb1aa2a"/> <!-- NuGet版log4net的公钥 --> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
- 以管理员身份打开Visual Studio命令提示符,运行命令禁用对该特定公钥log4net的强名称验证:
sn -Vr *,692fbea5521e1304
方法3:检查项目平台配置
确保项目的平台目标与Crystal Reports组件兼容:
- 右键项目 → 属性 → 生成 → 平台目标选择
x86(旧版Crystal Reports对64位支持有限) - 取消勾选“首选32位”(如果选择了x86平台,该选项会灰化)
内容的提问来源于stack exchange,提问作者Usman Nazir
相关产品推荐
相关产品推荐

