System.IO.FileLoadException:无法加载文件或程序集 'log4net



我们在项目中使用水晶报告 MVC.NET 请参考此链接:从数据创建一个PDF文件,并使用 MVC.NET 中的水晶报告将其导出。• https://www.c-sharpcorner.com/article/use-crystal-report-in-mvc-net/

导出报告并尝试运行它后,我们遇到了此错误: System.TypeInitializationException:'CrystalDecisions.CrystalReports.Engine.ReportDocument' 的类型初始值设定项抛出异常。 --->System.TypeInitializationException:">CrystalDecisions.Shared.SharedUtils"的类型初始值设定项抛出异常。 ---> System.IO.FileLoadException:无法加载文件或程序集 'log4net,版本=1.2.10.0,区域性=中性,公钥令牌=692fbea5521e1304'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT的例外:0x80131040(

最有可能的是,您使用"AnyCPU"作为目标编译了应用程序。 更改为特定目标(x86 或 64(。 确保 Crystal 运行时与该目标匹配。 确保还针对该目标设置 Web 应用池。

这是对我有用的:

记下一些细节

从错误中,记录: .dll文件 版本 公钥令牌 供以后使用。

确认.dll存在

在VS中找到该项目,右键单击并"在文件资源管理器中打开文件夹"。然后进入../bin/调试并搜索导致异常的.dll文件。

如果.dll不存在,那么这不是正确的修复程序,其他问题。

获取.dll使用的正确程序集版本

我.dll的版本是 4.0.1.0。 如果您尚未安装 ILSpy,请在您的 PC 上打开微软商店并下载它(它是免费的(。然后将有问题的.dll文件拖到 ILSpy 中并搜索显示以下内容的行:

[assembly: AssemblyVersion("4.0.3.0")]

如您所见,版本之间存在不一致。这就是导致错误的原因。

更新应用程序.config

返回 VisualStudio,在失败的项目中打开 app.config 文件,并将此代码片段添加到:

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Configuration.ConfigurationManager" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>

确保公钥令牌是您记录的值,并将旧版本上限值和新版本值设置为在.dll文件中找到的程序集版本。此外,请确保错误中显示的版本在您设置的范围内(即它是旧版本(。

一切就绪。这应该有效。

最新更新