无法加载Microsoft.SqlServer.BatchParser或其中一个依赖项

时间:2012-09-24 08:00:57

标签: sql-server visual-studio-2010 sql-server-2008

我知道这个问题被多次询问,我在谷歌上发现了很多关于这个问题的信息,但我仍然无法解决我的DEV PC上存在的问题:(
I have that ugly error message on every page(无法加载文件或程序集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(参见配置截图)enter image description here

请帮我解决这个问题!感谢。

9 个答案:

答案 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年)后,出现了此错误:

  • 我们从通过MSI安装的2008 SMO进行了升级
  • 从安装它们的项目中删除了MSI
  • 通过nuget软件包提供的版本已升级到2017年
  • 安装它并将所有dll添加到项目中
  • 将软件包提供的dll添加到installshield

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)。

https://docs.microsoft.com/en-us/sql/relational-databases/server-management-objects-smo/installing-smo?view=sql-server-ver15

https://docs.microsoft.com/en-us/sql/relational-databases/server-management-objects-smo/files-and-version-numbers?view=sql-server-ver15

您需要做的是从站点下载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 来解决,干杯