我知道这个问题被多次询问,我在谷歌上发现了很多关于这个问题的信息,但我仍然无法解决我的DEV PC上存在的问题:(
(无法加载文件或程序集Microsoft.SqlServer.BatchParser)。我按照许多互联网资源的建议安装了Microsoft SQL Server 2005 Management Objects Collection,但没有帮助。然后我尝试安装Microsoft SQL Server 2008 Management Objects,但它说它无法安装,因为已经存在更新版本(我安装了SQL Server 2008)。
然后我去了GAC,发现了以下几行:
Microsoft.SqlServer.BatchParser,Version = 10.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91,processorArchitecture = AMD64
Microsoft.SqlServer.BatchParser,Version = 9.0.242.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91,processorArchitecture = AMD64
Microsoft.SqlServer.BatchParser,Version = 10.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91,processorArchitecture = x86
Microsoft.SqlServer.BatchParser,Version = 9.0.242.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91,processorArchitecture = x86
Microsoft.SqlServer.BatchParserClient,Version = 10.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91,processorArchitecture = MSIL < - 版本9.0.242.0是否存在?
我已经花了大约半天时间找到一个没有成功的解决方案,当intellisense因为错误而无效时,使用VS非常糟糕。
我安装了VS 2010 SQL Express 2005和SQL Server 2008(参见配置截图)
请帮我解决这个问题!感谢。
答案 0 :(得分:6)
* 注意:此答案适用于从C#程序使用MS SQL SMO(管理对象)的人员。 我正在努力解决问题中提到的错误。我得到的确切错误是:
无法加载文件或程序集“Microsoft.SqlServer.BatchParser.dll” 或其中一个依赖项。动态链接库(DLL) 初始化例程失败。 (HRESULT异常:0x8007045A)
在.NET 4.0(或更高版本)CLR中运行.NET 2.0程序集时遇到了问题。 sql server SMO程序集是针对运行时的v2.0.50727构建的,因此app.config(或web.config)中需要以下部分
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
PS:MSDN论坛上的提示位于this discussion thread。
答案 1 :(得分:5)
您是否在Management Studio或Visual Studio中看到此错误?你什么时候收到此错误消息?该问题可能是由于32位与64位交互引起的,如
中的文档所述956178在基于Itanium的Windows版本上运行32位版本的SQL Server 2008时出现错误消息:&#34;系统找不到指定的文件&#34; http://support.microsoft.com/kb/956178/EN-US
如果您使用的是64位系统,请确保安装了64位版本的更新管理对象。
答案 2 :(得分:4)
此时2020年2月8日smo 16解决了该问题。
Install-Package Microsoft.SqlServer.SqlManagementObjects -Version 160.1911221.0-preview
仍处于预览状态,但效果很好
答案 3 :(得分:3)
通过visual studio执行应用程序时,您必须收到此错误。我在过去遇到过这个错误,但经过一些解决方法(如
)后解决了1)删除不需要的BatchParser引用(如果它存在于web.config中) 2)使用了一些可能导致应用程序通过此错误的第三方dll 3)您可能已经从其他页面复制了您的aspx页面而忘记更改“inherts”部分。
答案 4 :(得分:2)
我必须进入应用程序池的高级设置并将“启用32位应用程序”设置为TRUE(我运行的是64位SQL Server)。
答案 5 :(得分:0)
如果您正在使用从Nuget获取的最新SMO检索,您可能也会遇到类似的问题
无法加载文件或程序集'Microsoft.SqlServer.BatchParser, 版本= 15.100.0.0,文化=中性,PublicKeyToken = 89845dcd8080cc91' 或其依赖项之一。系统找不到指定的文件。
或消息而不告诉您版本号
无法加载文件或程序集'Microsoft.SqlServer.BatchParser.dll' 或其依赖项之一。找不到指定的模块。
对于那些错误是没有提到版本号的人,是因为我们需要vc2013运行时来执行SMO。 See Microsoft's explanation and download link here.
对于上面的版本号有错误的用户,我发现jendev在a repo中提供了this discussion,您可以在克隆后克隆并获取dll。 如果您没有Visual Studio,请使用my fork,其中已经包含确切的dll。
答案 6 :(得分:0)
我知道这是一个非常老的问题,但以防万一这对其他人有帮助,我在Microsoft.SqlServer.SqlManagementObjects
的{{1}}应用程序(v150.18208.0)中使用了C#
。当我到达尝试使用Nuget
的代码时,它炸毁并给出错误:
“无法加载文件或程序集'Microsoft.SqlServer.BatchParser, 版本= 15.100.0.0,文化=中性,PublicKeyToken = 89845dcd8080cc91' 或其依赖项之一。系统找不到文件 指定。“:” Microsoft.SqlServer.BatchParser,版本= 15.100.0.0, 文化=中性,PublicKeyToken = 89845dcd8080cc91”
这是一个有望在ServerConnection.ConnectionContext.ExecuteNonQuery
软件包中修复的错误。
我通过手动将Nuget
的v15.0.600.33添加到Microsoft.SqlServer.BatchParser
来解决该错误。我在GAC
找到了dll
。根据您安装的C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLCommon\150
,此路径可能会更改。
如果您要分发并且不希望用户将其添加到Visual Studio
,则只需在您的GAC
项目中加入dll
作为参考。
答案 7 :(得分:0)
在升级我的installshield项目(从2008年到2017年)后,出现了此错误:
installshield安装我的程序后,它立即爆炸并抱怨BatchPaser.dll:
“无法加载文件或程序集'Microsoft.SqlServer.BatchParser, 版本= 15.100.0.0,文化=中性,PublicKeyToken = 89845dcd8080cc91' 或其依赖项之一。系统找不到文件 指定。“:” Microsoft.SqlServer.BatchParser,版本= 15.100.0.0, Culture = neutral,PublicKeyToken = 89845dcd8080cc91“
调试一段时间后,我从站点下载了nuget软件包。使用新的SMO软件包,而不是msi来安装它们,Microsoft建议不要将它们添加到您的GAC中(以防万一):
如“文件和版本号”页面上所述,您不应 将SMO组件安装到GAC中。这样做可能会引起问题 与也使用这些版本的SMO的其他应用程序(例如 SQL Server Management Studio)。
您需要做的是从站点下载nuget软件包,然后转到runtimes / win-x86 / native。然后,您会看到BatchParser.dll。将其添加到项目的安装目录/目录中。为我工作,错误消息告诉我的几乎是什么。 Nuget只是没有在项目中安装此文件。
https://www.nuget.org/packages/Microsoft.SqlServer.SqlManagementObjects/150.18178.0
答案 8 :(得分:0)
就我而言,这个问题可以通过在 Visual Studio (2019) 中的 C# 项目的构建设置中将目标平台设置为 x86 来解决,干杯