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

14

我知道这个问题已经被问了很多次,我在谷歌上找到了很多相关的信息,但是在我的DEV电脑上仍然无法解决这个问题:(
每个页面都会有这个丑陋的错误消息

无法加载文件或程序集Microsoft.SqlServer.BatchParser

根据许多互联网资源的建议,我安装了Microsoft SQL Server 2005管理对象集合,但没有帮助。

然后我尝试安装Microsoft SQL Server 2008管理对象,但它表示无法安装,因为已经存在更新版本(我已安装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个回答

8

注意:本答案适用于使用C#程序从MS SQL SMO(管理对象)中的人员。

我曾经因为这个问题而苦恼。我得到的确切错误如下:

无法加载文件或程序集“Microsoft.SqlServer.BatchParser.dll”或其一个依赖项。动态链接库(DLL)初始化例程失败。(HRESULT 异常: 0x8007045A)

最终发现是在.NET 4.0(或更高版本)CLR内运行.NET 2.0程序集的问题。SQL服务器SMO程序集是针对v2.0.50727运行时构建的,因此需要在app.config(或web.config)中添加以下部分:

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>

提示在 MSDN 论坛上的这个讨论线程中。


5

2020年2月8日,smo 16解决了这个问题。

Install-Package Microsoft.SqlServer.SqlManagementObjects -Version 160.1911221.0-preview

虽然仍处于预览状态,但它的效果非常好。


你是在哪里运行的?命令提示符?在哪个目录下,有具体要求吗? - Amitya Narayan
这只是一个 NuGet 包,您必须将其添加到您的项目中。 - Juan Pablo Gomez
https://www.nuget.org/packages/Microsoft.SqlServer.SqlManagementObjects - JDC

5
你在Management Studio或Visual Studio中看到了这个错误吗?你什么时候收到这个错误消息?问题可能是由于32位与64位交互引起的,如文档所述:
956178 在基于Itanium的Windows版本上运行32位SQL Server 2008版本时出现错误消息:“系统找不到指定的文件”http://support.microsoft.com/kb/956178/EN-US 如果你使用的是64位系统,请确保安装了更新的管理对象的64位版本。

当我打开ASPX页面进行编辑时,Visual Studio中出现了错误。在文件顶部,我看到了错误消息,然后智能感知就无法工作了。我使用的是Windows 7 64位、SQL2008 32位、VS2010 32位,配备四核Q8400 CPU。我尝试安装SQL2008的管理对象,但它告诉我已经安装了更新版本。 - Alex Dn
请下载他们推荐的两个软件包,对于x64,首先安装clr类型,然后再安装SharedManagementObjects。具体见 https://social.technet.microsoft.com/wiki/contents/articles/35832.sql-server-troubleshooting-could-not-load-file-or-assembly-microsoft-sqlserver-batchparser.aspx - Savage

3

在通过Visual Studio执行应用程序时,您可能会遇到此错误。我以前也遇到过这个错误,但是经过以下一些解决方法后,问题得到了解决:

  1. 删除web.config中不需要的BatchParser引用(如果存在)。
  2. 可能使用了一些第三方DLL导致应用程序出现此错误。
  3. 您可能从其他页面复制了aspx页面,并忘记更改“inherits”部分。

  1. 我在解决方案中没有找到任何关于BatchParser的引用。
  2. 我认为不可能,但是有没有办法确定一下呢?
  3. 这是一个包含DB项目的旧解决方案,在某个时候开始出现错误。
- Alex Dn
你能放一个调试器并告诉我们哪一行出错了吗? - NG.
当我附加到进程时,网站上没有出现错误。只有在设计时间,在编辑ASPX标记时,在@Page指令行下方显示它被下划线(就像错误一样)。当我将鼠标悬停在其上时,它会显示BatchParser错误。不存在编译错误或运行时错误。 - Alex Dn
你是否仔细检查了这一点:“您可能已经从其他页面复制了您的aspx页面,并忘记更改“inherts”部分。”? - NG.

2
如果您正在使用最新的Nuget SMO,您可能会遇到类似的问题:

无法加载文件或程序集“Microsoft.SqlServer.BatchParser,Version=15.100.0.0,Culture=neutral,PublicKeyToken=89845dcd8080cc91”或其中一个依赖项。系统找不到指定的文件。

或者没有告诉您版本号的消息:

无法加载文件或程序集“Microsoft.SqlServer.BatchParser.dll”或其中一个依赖项。找不到指定的模块。

对于那些错误中未提及版本号的人来说,这是因为我们需要vc2013运行时来进行SMO。请参阅Microsoft的解释和下载链接。 对于那些遇到版本号问题的人,我在这个讨论中发现jendev提供了一个仓库,你可以克隆它并在编译后获得dll。 如果你没有Visual Studio,那么可以使用我的分支, 它已经包含了精确的dll。

这是为我解决问题的方法。使用Fusion++,我发现BatchParser正在加载试图加载Microsoft.SqlServer.ConnectionInfo.dll的BatchParserClient,并且失败了。 根据该链接中列出的系统要求安装VC++运行时即可解决问题。转到https://www.microsoft.com/en-us/download/details.aspx?id=40784并安装基于你的.Net应用程序的体系结构而不是系统体系结构的运行时版本。 - Steve Hiner

2

我必须进入我的应用程序池的高级设置,并将“启用32位应用程序”设置为TRUE(我正在运行64位SQL Server)。


(说明:此句话是关于IT技术的,涉及到应用程序池和SQL Server的设置。翻译中保留了HTML标签,同时尽可能地简化了句子结构,使其更加易懂。)

1
我遇到了相反的问题。我的应用程序构建属性中选中了“首选32位”,但我安装了64位的SMO。 - mhenry1384

1
我知道这是一个相当旧的问题,但以防万一有人需要帮助,我在我的C#应用程序(v150.18208.0)中使用了来自Nuget的Microsoft.SqlServer.SqlManagementObjects。当我尝试使用ServerConnection.ConnectionContext.ExecuteNonQuery时,它会崩溃并显示以下错误信息:"Could not load file or assembly 'Microsoft.SqlServer.BatchParser, Version=15.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'或其某个依赖项。系统找不到指定的文件:"Microsoft.SqlServer.BatchParser, Version=15.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"。这是一个bug,希望在Nuget包中得到修复。
我通过手动将版本为v15.0.600.33的Microsoft.SqlServer.BatchParser添加到GAC中解决了错误。我在C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLCommon\150找到了这个dll。这个路径可能会因为你的Visual Studio安装位置而有所不同。
如果您正在分发并且不希望用户将其添加到GAC,则只需在C#项目中包含该dll作为引用即可。

0

我在升级我的installshield项目(从2008到2017)后遇到了以下错误:

  • 我们从2008 SMO通过MSI安装进行了升级
  • 从项目中删除了安装它们的MSI
  • 升级到2017,这些是通过nuget包交付的
  • 安装它并将所有dll添加到项目中
  • 将软件包提供的dll添加到installshield中

在installshield安装我的程序后,它立即崩溃,并抱怨BatchPaser.dll:

"无法加载文件或程序集'Microsoft.SqlServer.BatchParser, Version=15.100.0.0,Culture=neutral,PublicKeyToken=89845dcd8080cc91' 或其某个依赖项。系统找不到指定的文件。":"Microsoft.SqlServer.BatchParser, Version=15.100.0.0,Culture=neutral,PublicKeyToken=89845dcd8080cc91"

在调试了一段时间后,我从网站下载了nuget包。由于新的SMO在包中而不是通过msi安装,因此微软不建议将它们添加到您的GAC中(如果您想知道的话):

正如“文件和版本号”页面所述,您不应将SMO程序集安装到GAC中。这样做可能会导致其他应用程序(如SQL Server Management Studio)使用那些版本的SMO时出现问题。

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

https://learn.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


0
在我的情况下,这个问题可以通过在 Visual Studio (2019) 中的 C# 项目的构建设置中将目标平台设置为 x86 来解决,谢谢。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接