运行.NET 4桌面应用程序失败

时间:2010-11-01 08:54:46

标签: .net dependencies

我创建了一个.NET 4桌面应用程序,可以在各种基于Windows-7的PC上运行,无论是否安装了Visual Studio。目标PC需要具有.NET framework 4客户端配置文件和扩展配置文件。

然而,当我尝试在Vista PC上运行相同的应用程序(这是我唯一使用Vista的PC,我没有检查过其他人因此Vista可能不是责任)安装了.NET 4,我得到了这个异常,我无法弄清楚:

Exception object: 01dc1bb4
Exception type:   System.BadImageFormatException
Message:          Could not load file or assembly 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The module was expected to contain an assembly manifest.
InnerException:   System.BadImageFormatException, Use !PrintException 01dc25d8 to see more.
StackTrace (generated):
SP       IP       Function
0029E264 6F98249A mscorlib_ni!System.ModuleHandle.ResolveMethodHandleInternalCore(System.Reflection.RuntimeModule, Int32, IntPtr[], Int32, IntPtr[], Int32)+0x8a
0029E29C 6F97B4E2 mscorlib_ni!System.ModuleHandle.ResolveMethodHandleInternal(System.Reflection.RuntimeModule, Int32, System.RuntimeTypeHandle[], System.RuntimeTypeHandle[])+0x42
0029E2C4 6F97AFFF mscorlib_ni!System.Reflection.CustomAttributeData..ctor(System.Reflection.RuntimeModule, System.Reflection.CustomAttributeRecord)+0x37
0029E448 6F97AF97 mscorlib_ni!System.Reflection.CustomAttributeData.GetCustomAttributes(System.Reflection.RuntimeModule, Int32)+0x53
0029E464 6F97C887 mscorlib_ni!System.Reflection.CustomAttributeData.GetCustomAttributesInternal(System.Reflection.RuntimeAssembly)+0x47
0029E480 6F97C825 mscorlib_ni!System.Reflection.RuntimeAssembly.GetCustomAttributesData()+0x5
0029E484 6F97C815 mscorlib_ni!System.Reflection.CustomAttributeData.GetCustomAttributes(System.Reflection.Assembly)+0x21
0029E490 6F97C5C9 mscorlib_ni!System.Resources.ManifestBasedResourceGroveler.GetNeutralResourcesLanguage(System.Reflection.Assembly, System.Resources.UltimateResourceFallbackLocation ByRef)+0x31
0029E4DC 6F97C515 mscorlib_ni!System.Resources.ResourceManager.CommonSatelliteAssemblyInit()+0x6d
0029E4F8 6F97C439 mscorlib_ni!System.Resources.ResourceManager..ctor(System.String, System.Reflection.Assembly)+0x51
0029E510 009CF7DB Microsoft_Practices_Composite_ba0000!Microsoft.Practices.Composite.Properties.Resources.get_ResourceManager()+0x9b
0029E53C 009CF700 Microsoft_Practices_Composite_ba0000!Microsoft.Practices.Composite.Properties.Resources.get_DefaultTextLoggerPattern()+0x20
0029E550 009CF585 Microsoft_Practices_Composite_ba0000!Microsoft.Practices.Composite.Logging.TextLogger.Log(System.String, Microsoft.Practices.Composite.Logging.Category, Microsoft.Practices.Composite.Logging.Priority)+0x35
0029E5CC 009CF359 Microsoft_Practices_Composite_UnityExtensions_b70000!Microsoft.Practices.Composite.UnityExtensions.UnityBootstrapper.Run(Boolean)+0x99
0029E624 009CF2A4 Microsoft_Practices_Composite_UnityExtensions_b70000!Microsoft.Practices.Composite.UnityExtensions.UnityBootstrapper.Run()+0x24
0029E630 009CF054 iToldem!ClientBootstrapper.App.OnStartup(System.Windows.StartupEventArgs)+0x54
0029E648 009CEF43 PresentationFramework_4310000!System.Windows.Application.<.ctor>b__1(System.Object)+0x33
0029E658 009CC04D WindowsBase_4a00000!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)+0xfd
0029E67C 009CBED0 WindowsBase_4a00000!MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)+0x40
0029E6C4 009CBAC6 WindowsBase_4a00000!System.Windows.Threading.Dispatcher.WrappedInvoke(System.Delegate, System.Object, Int32, System.Delegate)+0x36
0029E6E4 009CEE4D WindowsBase_4a00000!System.Windows.Threading.DispatcherOperation.InvokeImpl()+0x5d
0029E714 009CEDD9 WindowsBase_4a00000!System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)+0x29
0029E71C 6F974DB5 mscorlib_ni!System.Threading.ExecutionContext.runTryCode(System.Object)+0x51
0029EBC0 6F974CBA mscorlib_ni!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)+0x6a
0029EBD8 6F977FC2 mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+0x7e
0029EBFC 6F977F34 mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)+0x2c
0029EC18 009CED00 WindowsBase_4a00000!System.Windows.Threading.DispatcherOperation.Invoke()+0x50
0029EC54 009CE8B7 WindowsBase_4a00000!System.Windows.Threading.Dispatcher.ProcessQueue()+0x1a7
0029EC94 009CE5D4 WindowsBase_4a00000!System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)+0x64
0029ECE8 009CC253 WindowsBase_4a00000!MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)+0xb3
0029ED34 009CC17F WindowsBase_4a00000!MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)+0x6f
0029ED44 009CC04D WindowsBase_4a00000!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)+0xfd
0029ED68 009CBED0 WindowsBase_4a00000!MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)+0x40
0029EDB0 009CBAC6 WindowsBase_4a00000!System.Windows.Threading.Dispatcher.WrappedInvoke(System.Delegate, System.Object, Int32, System.Delegate)+0x36
0029EDD0 009CB82B WindowsBase_4a00000!System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)+0x8b
0029EE18 009CB29F WindowsBase_4a00000!MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)+0x19f
0029EFE4 009CDFBB WindowsBase_4a00000!System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)+0xab
0029F034 009CDE2E WindowsBase_4a00000!System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)+0x2e
0029F040 009CDD5A PresentationFramework_4310000!System.Windows.Application.RunDispatcher(System.Object)+0x2a
0029F04C 009CD987 PresentationFramework_4310000!System.Windows.Application.RunInternal(System.Windows.Window)+0x167
0029F060 009CD67A PresentationFramework_4310000!System.Windows.Application.Run(System.Windows.Window)+0x2a
0029F070 009CD62F PresentationFramework_4310000!System.Windows.Application.Run()+0x5f
0029F07C 009C00B1 MyApplication!ClientBootstrapper.App.Main()+0x41

StackTraceString: <none>
HResult: 80131018

我的问题是:

  1. 这里有什么问题?
  2. 这不是我第一次遇到“无法加载文件或程序集”而且我一直在猜测为什么会发生这种情况以及如何修复它。上次它是一个在Debug中编译的非托管C ++ DLL,不能在客户端PC上运行。如何获得有关问题确切性质的更多信息?
  3. 由于我怀疑.NET安装问题,有没有办法验证.NET安装是否正确?
  4. 其他信息: 我已经编译了一个简单的控制台应用程序和一个简单的WPF应用程序,它们在目标PC上运行良好,这让我相信我的原始应用程序是责任 - 但我该如何追踪它?

    编辑:问题最终通过完全卸载.NET 4并重新安装来解决。奇怪的是,尽管安装不好,但大多数.NET应用程序确实有效。

2 个答案:

答案 0 :(得分:1)

原来.NET框架4安装以某种方式被破坏了。完全卸载并重新安装后,一切都按顺序进行。

答案 1 :(得分:0)

这种类型的execption通常是尝试使用32位和64位混合DLL运行应用程序的结果。

主要规则是应用程序只能包含所有相同类型(32位或64位)的asssemblies(以及这些程序集的依赖项)。

如果您使用x64或x86设置构建应用程序,那么该应用程序将纯粹是x64或x86。

问题:如果使用Any CPU设置构建应用程序,则JIT(即时)编译器将在运行时选择。如果底层操作系统是x64,那么JIT将选择x64,但如果你在某处有32位依赖关系,那么你将在运行时获得异常。

作为一般规则,请尝试将构建类型专门设置为x86或x64。