我的应用程序依赖于几个 DLL。我将它们全部放在资源中,然后在应用程序启动时使用我在网上找到的方法加载它们:
public static void LoadDllsFromResources()
{
AppDomain.CurrentDomain.AssemblyResolve += (sender, a) =>
{
string dllName = a.Name.Contains(',')
? a.Name.Substring(0, a.Name.IndexOf(','))
: a.Name.Replace(".dll", "");
dllName = dllName.Replace(".", "_");
if (dllName.EndsWith("_resources")) return null;
System.Resources.ResourceManager rm =
new System.Resources.ResourceManager(
"DesktopDashboard" + ".Properties.Resources",
System.Reflection.Assembly.GetExecutingAssembly());
byte[] bytes = (byte[])rm.GetObject(dllName);
return System.Reflection.Assembly.Load(bytes);
};
}
在我尝试添加 WPFToolkitExtended.dll 之前,它对我来说很好。比我的应用程序抛出错误。是什么让这个 DLL 如此特别?
System.Windows.Markup.XamlParseException:“设置 connectionId 引发异常。” 行号“4”和行位置“37”。---> System.InvalidCastException:[A]Xceed.Wpf.Toolkit.BusyIndicator 不能转换为 [B]Xceed.Wpf.Toolkit.BusyIndicator。类型 A 源自字节数组中上下文“LoadNeither”中的“WPFToolkit.Extended, Version=1.7.4644.13122, Culture=neutral, PublicKeyToken=3e4669d2f30244f4”。类型 B 源自字节数组中上下文“LoadNeither”中的“WPFToolkit.Extended, Version=1.7.4644.13122, Culture=neutral, PublicKeyToken=3e4669d2f30244f4”。在 DesktopDashboard.LogoutWindow.System.Windows.Markup.IComponentConnector.Connect(Int32 connectionId, Object target) 在 MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetConnectionId(Object root,
在 System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 在 MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) 在 System.Windows .Threading.DispatcherOperation.InvokeImpl() 在 System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state) 在 System.Threading.ExecutionContext.runTryCode(Object userData) 在 System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode 代码,CleanupCode backoutCode , 对象 userData) 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 在 System.Windows.Threading.DispatcherOperation.Invoke() 在 System.Windows.Threading.Dispatcher.ProcessQueue() 的 ContextCallback 回调,对象状态,布尔 ignoreSyncCtx) ) 在 System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& 处理) 在 MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& 处理) 在 MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) 在 System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 在 MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method,对象参数,Int32 numArgs, Delegate catchHandler) 在 System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority 优先级, TimeSpan 超时, 委托方法, Object args, Int32 numArgs) 在 MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) 在 MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) 在 System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) 在 System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame 框架)处的 DispatchMessage(MSG 和消息) System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame 框架)System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame 框架)处的 DispatchMessage(MSG 和消息) System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame 框架)
在 System.Windows.Application.RunDispatcher(Object ignore) 在 System.Windows.Application.RunInternal(Window 窗口) 在 System.Windows.Application.Run(Window 窗口) 在 System.Windows.Application.Run() 在 DesktopDashboard.App .Main(字符串 [] 参数)