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

时间:2012-06-06 16:19:25

标签: asp.net sql-server

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

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

     

无法加载文件或程序集“Microsoft.SqlServer.DTSRuntimeWrap”   或其中一个依赖项。尝试加载程序   格式不正确。

     

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

     

异常详细信息:System.BadImageFormatException:无法加载文件   或汇编'Microsoft.SqlServer.DTSRuntimeWrap'或其中一个   依赖。尝试加载程序不正确   格式。

来源错误:

  

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

     

装配加载跟踪:以下信息可能对您有所帮助   确定程序集“Microsoft.SqlServer.DTSRuntimeWrap”可以的原因   不加载。

     

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

堆栈追踪:

  

[BadImageFormatException:无法加载文件或程序集   'Microsoft.SqlServer.DTSRuntimeWrap'或其依赖项之一。一个   尝试加载格式不正确的程序。]
  System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String   codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,   StackCrawlMark&安培; stackMark,Boolean throwOnFileNotFound,Boolean   forIntrospection,Boolean suppressSecurityChecks)+0
  System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(的AssemblyName   assemblyRef,Evidence assemblySecurity,StackCrawlMark& stackMark,   Boolean forIntrospection,Boolean suppressSecurityChecks)+567
  System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString,   证据集合安全,StackCrawlMark& stackMark,布尔   forIntrospection)+192 System.Reflection.Assembly.Load(String   assemblyString)+35
  System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串   assemblyName,Boolean starDirective)+123

     

[ConfigurationErrorsException:无法加载文件或程序集   'Microsoft.SqlServer.DTSRuntimeWrap'或其依赖项之一。一个   尝试加载格式不正确的程序。]
  System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串   assemblyName,布尔starDirective)+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,Exception appDomainCreationException)+1167

     

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

3 个答案:

答案 0 :(得分:37)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

就我而言,在 IIS 中的“DefaultAppPool”上启用“允许 32 位应用程序”后,问题得到解决。

以下是执行此操作的步骤

  1. 开放互联网信息服务
  2. 转到应用程序池
  3. 右键单击“DefaultAppPool”
  4. 选择高级设置
  5. 将“启用 32 个应用程序”设置为 true
  6. 点击确定
  7. 回收应用程序池
  8. 重启 IIS