为什么我的应用程序在另一台 PC 上启动时崩溃?

Why is my app crashing at startup on another PC?

在我的开发箱 (Window 10 Pro x64 v1607) 上,我构建了一个 .NET 应用程序(VS Premium 2013 Update 5,Framework 4.5.1,平台目标:任何 CPU) 运行 很好。 (Microsoft.Expression.Interactions.dll (v 3.0.40218.0) 和 Ninject.dll (v. 3.2.2.0) 的 dll 依赖项与可执行文件位于同一目录中。)

但是,我转到 运行 Windows Server 2008 R2 Std x64 SP1 上的应用程序(终端服务器模式,本地管理员权限),它在启动时崩溃(.exe 及更高版本.dll 在同一个目录中)。 Server 2008 框确实安装了 .NET Framework 4.5.2(由 this method 确定)。我得到以下问题签名:

Problem signature:
  Problem Event Name:   CLR20r3
  Problem Signature 01: MyApp.exe
  Problem Signature 02: 2.0.0.0
  Problem Signature 03: 588b6952
  Problem Signature 04: mscorlib
  Problem Signature 05: 4.0.30319.36373
  Problem Signature 06: 583fd726
  Problem Signature 07: 27cf
  Problem Signature 08: 0
  Problem Signature 09: System.Windows.Markup.XamlParse
  OS Version:   6.1.7601.2.1.0.16.7
  Locale ID:    1033
  Additional Information 1: 0a9e
  Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
  Additional Information 3: 0a9e
  Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

此外,在 Windows Logs/Application 中,我收到此 .NET 运行时错误:

Application: MyApp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Windows.Markup.XamlParseException
Stack:
   at System.Windows.Markup.WpfXamlLoader.Load(System.Xaml.XamlReader, System.Xaml.IXamlObjectWriterFactory, Boolean, System.Object, System.Xaml.XamlObjectWriterSettings, System.Uri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(System.Xaml.XamlReader, Boolean, System.Object, System.Xaml.Permissions.XamlAccessLevel, System.Uri)
   at System.Windows.Markup.XamlReader.LoadBaml(System.IO.Stream, System.Windows.Markup.ParserContext, System.Object, Boolean)
   at System.Windows.Application.LoadComponent(System.Object, System.Uri)
   at MyApp.MainWindow.InitializeComponent()
   at MyApp.MainWindow..ctor(MyApp.MainWindowVM)
   at DynamicClass.DynamicInjector73c5fe57e70845ecaa6b82291e882454(System.Object[])
   at Ninject.Activation.Providers.StandardProvider.Create(Ninject.Activation.IContext)
   at Ninject.Activation.Context.ResolveInternal(System.Object)
   at Ninject.Activation.Context.Resolve()
   at Ninject.KernelBase+<>c__DisplayClass15.<Resolve>b__f(Ninject.Planning.Bindings.IBinding)
   at System.Linq.Enumerable+WhereSelectEnumerableIterator`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].MoveNext()
   at System.Linq.Enumerable+<CastIterator>d__b1`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].MoveNext()
   at System.Linq.Enumerable.Single[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
   at Ninject.ResolutionExtensions.Get[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](Ninject.Syntax.IResolutionRoot, Ninject.Parameters.IParameter[])
   at MyApp.App.OnStartup(System.Windows.StartupEventArgs)
   at System.Windows.Application.<.ctor>b__1(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Threading.Dispatcher.Run()
   at System.Windows.Application.RunDispatcher(System.Object)
   at System.Windows.Application.RunInternal(System.Windows.Window)
   at System.Windows.Application.Run(System.Windows.Window)
   at System.Windows.Application.Run()
   at MyApp.App.Main()

我是不是漏掉了一些dll?错误的dll版本?感谢指点。

找到丢失的 dll:System.Windows.Interactivity.dll,位于 C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Windows.Interactivity\v4.0_4.5.0.0__31bf3856ad364e35 中我的 W10 PC 上。远程调试发现不法分子!