ASP.NET Web API运行dtsx文件时加载Microsoft.SqlServer.DTSRuntimeWrap失败求助
构建ASP.NET Web API应用程序以运行服务器上的dtsx文件时,执行以下代码触发程序集加载错误:
Application app = new Application();
错误信息:
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.SqlServer.DTSRuntimeWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'. The system cannot find the file specified. File name: 'Microsoft.SqlServer.DTSRuntimeWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'
已尝试操作:
- 将项目生成属性的平台目标从“Any CPU”改为x64
- 安装SQL Server 2014以匹配12.0.0.0版本(此前为15.0.0.0)
确认SQL Server Integration Services (SSIS) 组件已安装
SQL Server 2014默认不会自动安装SSIS,需在安装时手动勾选“Integration Services”功能。打开「控制面板-程序和功能」,找到SQL Server 2014点击「更改」,检查SSIS是否已安装,未安装则补充安装该组件。验证程序集是否在全局程序集缓存(GAC)中
以管理员身份打开命令提示符,执行以下命令检查目标程序集:
gacutil -l Microsoft.SqlServer.DTSRuntimeWrap
若无返回结果,手动注册程序集。该dll通常位于C:\Program Files\Microsoft SQL Server\120\DTS\Binn\路径下,执行注册命令:
gacutil -i "C:\Program Files\Microsoft SQL Server\120\DTS\Binn\Microsoft.SqlServer.DTSRuntimeWrap.dll"
核对项目引用的程序集版本
在解决方案资源管理器中右键项目→「管理NuGet程序包」,确认已安装版本为12.0.x.x的Microsoft.SqlServer.DTSRuntimeWrap。若为手动添加引用,需从C:\Program Files\Microsoft SQL Server\120\DTS\Binn\路径选择dll,并将引用属性的「复制本地」设置为True。调整IIS应用程序池位数
若Web API部署在IIS上,需确保应用程序池的「启用32位应用程序」设置为False——SSIS 64位组件无法在32位池环境下运行。操作路径:IIS管理器→应用程序池→选中目标池→高级设置→启用32位应用程序→设置为False。检查应用程序池权限
运行Web API的应用程序池身份需具备访问SSIS组件和dtsx文件的权限。测试环境可先将身份设置为本地管理员,验证问题是否解决;生产环境建议配置具有SSIS操作权限的专用域账户。
内容的提问来源于stack exchange,提问作者Jonah

