最近在做C#执行Sql脚本的 程序 ,环境VS2012Sql Server 2008。本地运行没有错误,但是发布到服务器上就报如下错误 “/”应用 程序 中的服务器错误。 未能 加载 文件 或 程序 集“Microsoft.SqlServer.SqlEnum, Version=11.0.0.0, Culture=neutral, PublicKey
最近在做C#执行Sql脚本的程序,环境VS2012+Sql Server 2008。本地运行没有错误,但是发布到服务器上就报如下错误
“/”应用程序中的服务器错误。
要关闭此功能,请移除注册表值 [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查看版本是否正确(找到对应的类库,右键----属性-----详细信息---版权)