当我运行我的应用程序(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
答案 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 位应用程序”后,问题得到解决。
以下是执行此操作的步骤