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

Posted

技术标签:

【中文标题】无法加载 Microsoft.SqlServer.BatchParser 或其依赖项之一【英文标题】:Could not load Microsoft.SqlServer.BatchParser or one of its dependencies 【发布时间】:2012-09-15 16:12:54 【问题描述】:

我知道这个问题被问了很多次,我在谷歌上找到了很多关于这个问题的信息,但我仍然无法解决我的 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,版本=10.0.0.0,文化=中性,PublicKeyToken=89845dcd8080cc91,处理器架构=AMD64

Microsoft.SqlServer.BatchParser,版本=9.0.242.0,文化=中性,PublicKeyToken=89845dcd8080cc91,处理器架构=AMD64

Microsoft.SqlServer.BatchParser,版本=10.0.0.0,文化=中性,PublicKeyToken=89845dcd8080cc91,处理器架构=x86

Microsoft.SqlServer.BatchParser,版本=9.0.242.0,文化=中性,PublicKeyToken=89845dcd8080cc91,处理器架构=x86

Microsoft.SqlServer.BatchParserClient, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL

我已经花了大约半天的时间寻找解决方案,但没有成功,当 IntelliSense 由于该错误而无法工作时,使用 VS 非常糟糕。

我安装了 VS 2010 SQL Express 2005 和 SQL Server 2008(见配置截图)

如何解决这个依赖问题?

【问题讨论】:

【参考方案1】:

您必须在通过 Visual Studio 执行应用程序时遇到此错误。我过去遇到过这个错误,但经过一些解决方法后解决了

    删除不需要的 BatchParser 引用(如果它存在于 web.config 中)。 使用了一些第 3 方 dll,这可能导致应用程序通过此错误。 您可能从其他页面复制了您的 aspx 页面并且忘记更改“继承”部分。

【讨论】:

1) 我没有在解决方案中找到对 BatchParser 的任何引用。 2)我认为没有,但可以确定吗? 3)这是一个包含数据库项目的旧解决方案,并且在某些时候开始出现错误。 你能放一个调试器,告诉我们你在哪一行出错了吗? 当我附加到进程时,现场没有发生错误。仅在设计时,编辑 ASPX 标记时,在 @Page 指令行中它显示它带下划线(如错误)。当我将鼠标悬停在它上面时,它会显示 BatchParser 错误。不存在编译错误或运行时错误。 您是否仔细检查了“您可能已经从其他页面复制了您的 aspx 页面并且忘记更改“inherts”部分。”?【参考方案2】:

您是否在 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 中出现的错误。在文件顶部,我看到该错误消息,然后智能不起作用。我正在使用带有四核 Q8400 CPU 的 Windows 7 64 位、SQL2008 32 位、VS2010 32 位。我试图为 sql2008 安装管理对象,但它告诉我已经安装了较新的版本。 见social.technet.microsoft.com/wiki/contents/articles/… 下载他们推荐的两个包,对于x64,先安装clr类型,再安装SharedManagementObjects。【参考方案3】:

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

【讨论】:

我遇到了相反的问题。我在应用程序的构建属性中检查了“首选 32 位”,但我安装了 64 位 SMO。【参考方案4】:

注意:此答案适用于从 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>

提示位于 MSDN 论坛上的 this discussion thread。

【讨论】:

【参考方案5】:

如果您使用从 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在this discussion中提供了a repo,你可以克隆并在编译后获取dll。 如果您没有 Visual Studio,请使用已包含确切 dll 的 my fork。

【讨论】:

【参考方案6】:

我知道这是一个相当古老的问题,但为了以防万一这对其他人有帮助,我在 NugetC# 应用程序 (v150.18208.0) 中使用 Microsoft.SqlServer.SqlManagementObjects。当我尝试使用ServerConnection.ConnectionContext.ExecuteNonQuery 的代码时,它会报错:

“无法加载文件或程序集'Microsoft.SqlServer.BatchParser, 版本=15.100.0.0,文化=中性,PublicKeyToken=89845dcd8080cc91' 或其依赖项之一。系统找不到文件 指定。":"Microsoft.SqlServer.BatchParser,版本=15.100.0.0, 文化=中性,PublicKeyToken=89845dcd8080cc91"

这是一个希望在 Nuget 包中得到修复的错误。

我通过手动将Microsoft.SqlServer.BatchParser 的v15.0.600.33 添加到GAC 来解决此错误。我在C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLCommon\150 找到了dll。此路径可能会根据您安装的Visual Studio 而改变。

如果您正在分发并且不希望您的用户将其添加到 GAC,那么只需在您的 C# 项目中包含 dll 作为参考。

【讨论】:

【参考方案7】:

我在升级 installshield 项目(2008 年到 2017 年)后收到此错误:

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

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

“无法加载文件或程序集'Microsoft.SqlServer.BatchParser, 版本=15.100.0.0,文化=中性,PublicKeyToken=89845dcd8080cc91' 或其依赖项之一。系统找不到文件 指定。":"Microsoft.SqlServer.BatchParser,版本=15.100.0.0, 文化=中性,PublicKeyToken=89845dcd8080cc91"

调试一段时间后,我从网站下载了nuget包。使用新的 SMO 软件包,而不是 msi 安装它们,Microsoft 不建议将它们添加到您的 GAC(以防万一):

如文件和版本号页面所述,您不应该 将 SMO 程序集安装到 GAC 中。这样做可能会导致问题 与也使用这些版本的 SMO 的其他应用程序(例如 SQL Server 管理工作室)。

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】:

此时 08 feb 2020 smo 16 解决问题。

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

仍处于预览阶段,但效果很好

【讨论】:

【参考方案9】:

就我而言,这个问题可以通过在 Visual Studio (2019) 中的 C# 项目的构建设置中将目标平台设置为 x86 来解决,干杯

【讨论】:

以上是关于无法加载 Microsoft.SqlServer.BatchParser 或其依赖项之一的主要内容,如果未能解决你的问题,请参考以下文章

无法加载文件或程序集 'Microsoft.SqlServer.Smo,版本 = 10.0.0

无法加载文件或程序集“Microsoft.SqlServer.BatchParserClien.dll 文件名

无法加载文件或程序集microsoft.sqlserver.sqlclrprovider 13.100.0.0

连接异常:CannotGetJdbcConnectionException:无法加载 JDBC 驱动程序类 ["com.microsoft.sqlserver.jdbc.SQLServerD

错误:无法加载文件或程序集“Microsoft.SqlServer.Management.Sdk.Sfc,Version = 11.0.0.0”

无法使用EF5和VS 2010加载文件或程序集“Microsoft.SqlServer.Types”