C#调用ExcelDataReader读取xlsx 提示无法加载3.4.2.0版本程序集
报错核心原因
这个错误是CLR运行时找不到匹配版本的ExcelDataReader程序集导致的,常见触发场景:
- 只安装了ExcelDataReader核心包,漏装了拆分出来的
ExcelDataReader.DataSet依赖包(3.x版本后DataSet相关的扩展方法被单独拆分到这个包,版本不匹配就会触发查找指定版本核心dll的报错) - 安装NuGet包时本地缓存损坏,或者程序集引用的「复制本地」属性被设为False,编译后dll没有被复制到项目输出目录
- 项目中多个组件引用了不同版本的ExcelDataReader,没有配置绑定重定向导致加载版本冲突
- 贴出的代码存在语法错误,会直接导致编译失败
修复步骤
1. 重新正确安装NuGet包
打开NuGet包管理器控制台,依次执行以下命令,先清理损坏的安装记录,再安装完整的匹配版本包:
# 强制卸载现有相关包 Uninstall-Package ExcelDataReader -Force Uninstall-Package ExcelDataReader.DataSet -Force # 安装3.4.2.0版本的完整依赖 Install-Package ExcelDataReader -Version 3.4.2.0 Install-Package ExcelDataReader.DataSet -Version 3.4.2.0
安装完成后清理解决方案,重新生成项目,检查bin输出目录下是否存在ExcelDataReader.dll,右键查看文件详情确认版本号为3.4.2.0。
2. 检查引用配置
- 在解决方案资源管理器的「引用」列表中找到ExcelDataReader,打开属性面板,确认复制本地选项设置为
True,保证编译时dll会被复制到运行目录。 - 如果使用SDK风格的项目格式(.NET Core/.NET 5+),打开csproj项目文件,删除ExcelDataReader相关引用上的
PrivateAssets="all"配置,避免包被标记为不输出到运行目录。
3. 修复代码错误
贴出的调用代码存在语法错误,方法调用缺少右括号,修正为:
Exceloperations.PopulateInCollection(@"C:\Users\Devcare\Desktop\DB.xlsx");
另外注意ExcelToDataTable方法需要调用ExcelDataReader.DataSet提供的扩展方法实现,标准实现参考:
public static DataTable ExcelToDataTable(string filename) { using (var stream = File.Open(filename, FileMode.Open, FileAccess.Read)) { using (var reader = ExcelReaderFactory.CreateReader(stream)) { var dataSet = reader.AsDataSet(new ExcelDataSetConfiguration { ConfigureDataTable = _ => new ExcelDataTableConfiguration { UseHeaderRow = true // 将第一行识别为表头 } }); return dataSet.Tables[0]; } } }
4. 配置绑定重定向(版本冲突时使用)
如果项目中其他类库引用了不同版本的ExcelDataReader,在项目的app.config/web.config中添加以下绑定配置,让运行时统一加载3.4.2.0版本:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="ExcelDataReader" publicKeyToken="93517dbe6a4012fa" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-3.4.2.0" newVersion="3.4.2.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
报错截图参考

内容的提问来源于stack exchange,提问作者Marees Bala
相关产品推荐
相关产品推荐

