部署到IIS后使用NPOI读取.xls文件报错:Unable to construct record instance
排查方案
检查文件权限
IIS应用池的运行身份默认没有访问非网站根目录文件的权限。找到你的.xls文件所在目录,右键→属性→安全→编辑,添加IIS AppPool\[你的应用池名称]用户,给它读取和执行、列出文件夹内容、读取权限,应用后重试。确认文件路径正确性
本地开发时的相对路径(比如./test.xls)在IIS部署后可能指向错误目录。建议用.NET Core提供的路径API构建绝对路径:// 基于网站内容根目录构建路径 var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "test.xls"); // 或者注入IWebHostEnvironment后使用 // var filePath = Path.Combine(_webHostEnvironment.ContentRootPath, "test.xls");同时可以把实际路径输出到日志,确认文件确实存在于该位置。
验证NPOI依赖完整性
NPOI除主dll外,还依赖ICSharpCode.SharpZipLib等组件。检查部署后的bin目录,确认所有NPOI相关的依赖dll都已上传,且版本和本地开发环境一致。可以通过NuGet重新打包发布,确保所有依赖都被自动包含。检查文件本身是否正常
有可能文件在上传到服务器过程中损坏,或者实际是.xlsx格式却改了后缀为.xls。重新上传原始文件,或者用Excel打开确认文件能正常读取后,再用NPOI尝试解析。检查IIS应用池配置
确保你的.NET Core应用对应的IIS应用池设置正确:- 托管管道模式设置为集成
- .NET CLR版本选择无托管代码(针对.NET Core 3.1及以上版本)
- 若使用自定义账户作为应用池身份,确保该账户有访问目标文件的权限
内容的提问来源于stack exchange,提问作者Gouri
相关产品推荐
相关产品推荐

