解决“未能加载文件或程序集Microsoft.SqlServer.SqlEnum,”的思路及解决过程

最近在做C#执行Sql脚本的程序,环境VS2012+Sql Server 2008。本地运行没有错误,但是发布到服务器上就报如下错误


“/”应用程序中的服务器错误。



未能加载文件或程序集“Microsoft.SqlServer.SqlEnum, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91”或它的某一个依赖项。系统找不到指定的文件。


说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 


异常详细信息: System.IO.FileNotFoundException: 未能加载文件或程序集“Microsoft.SqlServer.SqlEnum, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91”或它的某一个依赖项。系统找不到指定的文件。


源错误: 


执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。


程序集加载跟踪: 下列信息有助于确定程序集“Microsoft.SqlServer.SqlEnum, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91”未能加载的原因。




警告: 程序集绑定日志记录被关闭。
要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1。
注意: 会有一些与程序集绑定失败日志记录关联的性能损失。

要关闭此功能,请移除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。


看到以上报错信息顿时很慌张,首先我对系统文件不熟悉,对错误信息中提到的注册表也知之甚少,google搜索解决方案又没有类似的,项目验收在即,顿时如热锅上的蚂蚁。


但是不解决肯定是不行的,于是静下心来,慢慢想解决方案,思路也就有了。


首先,本程序我引用了三个dll文件,分别为:Microsoft.SqlServer.ConnectionInfo.dll    、Microsoft.SqlServer.Management.Sdk.Sfc.dll  、Microsoft.SqlServer.Smo.dll

这三个文件均是安装sql server时自带的公用类库,可以实现执行sql脚本(如创建、删除表及数据库等),由于我对这三个类库研究的不深,因此其他功能暂时不考虑。

言归正传,知道问题出现在哪几个类库上,我们再来看具体报错信息,“未能加载文件或程序集“Microsoft.SqlServer.SqlEnum, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91”或它的某一个依赖项。系统找不到指定的文件。”   我在发布的服务器上看到有以上三个库文件(C:\Windows\assembly下)但是版本为Version=10.0.0.0 而本地环境中引用的类库版本为Version=11.0.0.0,导致服务器上不认识类库。把本地引用的类库版本换成10,重新生成后发布到服务器上,一切正常,问题解决。


以上就是解决思路及方案,以后碰到类似的问题,小伙伴们再也不用发愁了。现在把解决方案归纳一下:

1查找环境中是否有相应的类库

2查看版本是否正确(找到对应的类库,右键----属性-----详细信息---版权)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章