无法加载文件或程序集“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