VS2010不能编译SQLServer2005的Microsoft.SQLServer.ManagedDTS.dll是最近碰到的一个疑难杂症问题,通过查询微软社区和一些英文资料找到了解决方法,同事说之前没有找到中文的,就整理了放在这里。
现象
项目里需要使用程序创建SSIS包,结果在VS2010里可以添加Microsoft.SQLServer.ManagedDTS.dll引用,写代码也有智能提示,但是一编译就告诉你引用不正确。有个警告里提示“
warning MSB3258: The primary reference "Microsoft.SQLServer.ManagedDTS, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" could not be resolved because it has an indirect dependency on the .NET Framework assembly "mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" which has a higher version "2.0.3600.0" than the version "2.0.0.0" in the current target framework.
”
原因
根据微软社区和一些英文资料介绍,这是微软的一个bug,原因为
Microsoft.SQLServer.msxml6_interop.dll引用了.net framework 2.0 的beta版。
解决方法
1.下载附件
Microsoft.SQLServer.msxml6_interop.dll.zip
,解压
2.打开 C:\Program Files\Program Files\Microsoft SQL Server\90\DTS\Binn,覆盖Microsoft.SQLServer.msxml6_interop.dll.
3.强制更新GAC里的dll文件。启动命令行:拷贝以下命令执行:
SUBST x: c:\windows\assembly\GAC_MSIL\Microsoft.SqlServer.msxml6_interop\6.0.0.0__89845dcd8080cc91
4.系统多一个X盘,点开X盘,覆盖Microsoft.SQLServer.msxml6_interop.dll.
5.subst x: /d 删除X盘。
参考1: Visual Studio 2010 cannot reference ManagedDTS dll from SQL Server 2005
参考2:
Microsoft.SqlServer.msxml6_interop.dll causes VS2010 cannot compile
VS2010不能编译SQLServer2005的Microsoft.SQLServer.ManagedDTS.dll的解决方法