14

我知道这个问题被问了很多次,我在谷歌上找到了很多关于这个问题的信息,但我仍然无法解决我的 DEV PC 上存在的问题:(
我在每一页上都有那个丑陋的错误信息

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

我按照许多 Internet 资源中的建议安装了Microsoft SQL Server 2005 管理对象集合,但它没有帮助。

然后我尝试安装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 <-- 版本 9.0.242.0 应该存在吗?

我已经花了大约半天的时间找到了一个没有成功的解决方案,当 IntelliSense 因为那个错误而无法工作时,使用 VS 非常糟糕。

我安装了 VS 2010 SQL Express 2005 和 SQL Server 2008(见配置截图) 在此处输入图像描述

如何解决这个依赖问题?

4

9 回答 9

8

注意:此答案适用于从 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 论坛上的这个讨论线程中。

于 2014-05-12T07:14:20.760 回答
5

您是否在 Management Studio 或 Visual Studio 中看到此错误?您何时收到此错误消息?该问题可能是由于文档中的 32 位与 64 位交互引起的

956178 在基于 Itanium 的 Windows 版本上运行 32 位版本的 SQL Server 2008 时出现错误消息:“系统找不到指定的文件” http://support.microsoft.com/kb/956178/EN-US

如果您使用的是 64 位系统,请确保您安装了 64 位版本的更新管理对象。

于 2012-09-28T17:26:21.467 回答
5

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

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

仍在预览中,但效果很好

于 2020-02-08T13:55:57.180 回答
3

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

  1. 删除不需要的 BatchParser 引用(如果它存在于 web.config 中)。
  2. 使用了一些可能导致应用程序通过此错误的第 3 方 dll。
  3. 您可能已经从其他页面复制了您的 aspx 页面并且忘记更改“继承”部分。
于 2012-09-28T03:20:52.797 回答
2

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

于 2014-04-10T17:58:44.053 回答
1

我知道这是一个很老的问题,但以防万一这对其他人有帮助,我Microsoft.SqlServer.SqlManagementObjects在我的C#应用程序 (v150.18208.0) 中使用Nuget. 当我得到试图使用ServerConnection.ConnectionContext.ExecuteNonQuery它的代码时,它爆炸了,给出了错误:

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

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

我通过手动将 v15.0.600.33 添加Microsoft.SqlServer.BatchParserGAC. 我找到了dllat C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLCommon\150。此路径可能会根据您安装的Visual Studio.

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

于 2019-12-13T21:05:33.210 回答
1

如果您使用从 Nuget 检索的最新 SMO,您可能会遇到类似的问题

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

或不告诉您版本号的消息

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

对于那些没有提到版本号的人来说,这是因为我们需要vc2013运行时来进行SMO。请在此处查看 Microsoft 的说明和下载链接。

对于上面版本号有错误的人,我发现 jendev在这个讨论中提供了一个 repo,你可以克隆并在编译后获取 dll。如果您没有 Visual Studio,那么请使用我的 fork,其中已经包含了确切的 dll。

于 2019-11-01T03:34:40.530 回答
0

升级 installshield 项目(2008 到 2017)后出现此错误:

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

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

“无法加载文件或程序集 'Microsoft.SqlServer.BatchParser, Version=15.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' 或其依赖项之一。系统找不到指定的文件。”:“Microsoft.SqlServer.BatchParser ,版本=15.100.0.0,文化=中性,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

于 2020-01-24T02:53:42.907 回答
0

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

于 2021-06-03T08:43:29.313 回答