无法加载文件或程序集“Microsoft.SqlServer.DTSRuntimeWrap”

Posted

技术标签:

【中文标题】无法加载文件或程序集“Microsoft.SqlServer.DTSRuntimeWrap”【英文标题】:Could not load file or assembly 'Microsoft.SqlServer.DTSRuntimeWrap' 【发布时间】:2012-06-06 16:19:24 【问题描述】:

我无法弄清楚为什么我在运行我的应用程序 (MVC 3) 时会收到此错误。该项目引用了 Microsoft.SQLServer.ManagedDTS。我安装了 SQL Server 2008 R2 和 SQL Server 2012(都是 Express)。我在这个应用程序中使用 2012。

“/”应用程序中的服务器错误。

或其依赖项之一。试图加载一个程序 格式不正确。

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.BadImageFormatException:无法加载文件 或程序集“Microsoft.SqlServer.DTSRuntimeWrap”或其之一 依赖关系。试图加载一个不正确的程序 格式。

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

装配负载跟踪:以下信息可能有助于 确定为什么程序集“Microsoft.SqlServer.DTSRuntimeWrap”可以 未加载。

警告:程序集绑定日志记录已关闭。启用程序集绑定 失败记录,设置注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 为 1。注意:有 是与装配绑定失败相关的一些性能损失 记录。要关闭此功能,请删除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。

堆栈跟踪:

[BadImageFormatException: 无法加载文件或程序集 'Microsoft.SqlServer.DTSRuntimeWrap' 或其依赖项之一。一个 试图加载格式不正确的程序。] System.Reflection.RuntimeAssembly._nLoad(AssemblyName 文件名,字符串 codeBase,证据 assemblySecurity,RuntimeAssembly locationHint, StackCrawlMark& stackMark,布尔 throwOnFileNotFound,布尔 forIntrospection, Boolean suppressSecurityChecks) +0 System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,证据 assemblySecurity,StackCrawlMark 和 stackMark, Boolean for Introspection, Boolean suppressSecurityChecks) +567 System.Reflection.RuntimeAssembly.InternalLoad(字符串组装字符串, 证据组装Security, StackCrawlMark& stackMark, Boolean forIntrospection) +192 System.Reflection.Assembly.Load(String 组装字符串)+35 System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串 程序集名称,布尔型星指令)+123

[ConfigurationErrorsException: 无法加载文件或程序集 'Microsoft.SqlServer.DTSRuntimeWrap' 或其依赖项之一。一个 试图加载格式不正确的程序。] System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串 程序集名称,布尔型星指令)+11568160 System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +485 System.Web.Configuration.AssemblyInfo.get_AssemblyInternal() +79 System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +337 System.Web.Compilation.BuildManager.CallPreStartInitMethods() +280 System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, 异常 appDomainCreationException) +1167

[HttpException (0x80004005): 无法加载文件或程序集 'Microsoft.SqlServer.DTSRuntimeWrap' 或其依赖项之一。一个 试图加载格式不正确的程序。] System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文) +11700896 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest WR,HttpContext 上下文)+4869125

【问题讨论】:

【参考方案1】:

如果这是 Web 应用程序的一部分,您需要启用从 IIS 应用程序池运行 32 位应用程序。这将解决您的问题。

【讨论】:

我知道这是一篇旧帖子,但仅供参考:这个答案是正确的,因为堆栈跟踪中存在潜在的“BadImageFormatException” - 还有很多其他方法可以获得标题错误。 更多帮助:转到 IIS > 应用程序池 > 选择相关池 > 右击并选择高级设置.. > 更改“启用 32 位应用程序”【参考方案2】:

Microsoft.SqlServer.DTSRuntimeWrap.dll 可能不在GAC 中,这意味着它必须复制到您的 Web 应用程序的 bin 文件夹中或手动添加到您机器的 GAC(例如, 使用 GACUTIL.exe)。您可能可以在C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\ 中找到它。如果您从 Visual Studio 项目中类似的位置引用它,那么您可能只需将 Copy Local 的引用属性中的选项设置为 True。 p>

请注意,此 DLL 可能不可再分发,因此您可能必须在运行应用程序的任何 Web 服务器上实际安装 SSIS,以免违反 SSIS 许可,但您必须验证这一点。

【讨论】:

也为了后代:@schellack 在这里关于许可的评论是正确的。如果您安装 SSIS(服务器许可证)或 BIDS(客户端许可证),则会安装“运行时”DTS 位。所以 AFAIK 有 无论哪种方式都有许可含义。【参考方案3】:

在我的情况下,在 IIS 中的“DefaultAppPool”上启用“允许 32 位应用程序”后,问题就解决了。

以下是执行此操作的步骤

    打开 Internet 信息服务 转到应用程序池 右击“DefaultAppPool” 选择高级设置 将“启用 32 个应用程序”设置为 true 点击确定 回收应用程序池 重启 IIS

【讨论】:

以上是关于无法加载文件或程序集“Microsoft.SqlServer.DTSRuntimeWrap”的主要内容,如果未能解决你的问题,请参考以下文章

无法加载文件或程序集 'PayPalAdaptivePaymentsSDK,版本 = 2.12.117.0

无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配

无法加载文件或程序集'netstandard,版本 = 2.0.0.0

无法加载文件或程序集 此处的程序集名称 或其依赖项之一。访问被拒绝

无法加载文件或程序集或其依赖项之一

寻找解决策略:无法加载文件或程序集[重复]