这就是您在非 WPF 应用程序中调用 Main() 的方式:
var entry = assembly.EntryPoint;
if (assembly.EntryPoint.GetParameters().Length == 0)
entry.Invoke(null, new object[0]);
else
entry.Invoke(null, new object[] { args });
但不知何故,它对 WPF 应用程序根本不起作用,我尝试过(MSDN 的方式):
Assembly asm = Assembly.LoadFrom(file);
Type myType = asm.GetType("WpfApplication1.App");
// Get the method to call.
MethodInfo myMethod = myType.GetMethod("Main");
// Create an instance.
object obj = Activator.CreateInstance(myType);
// Execute the method.
myMethod.Invoke(obj, null);
仍然没有成功,Reflector 将 Main() 显示为
[DebuggerNonUserCode, STAThread]
public static void Main()
{
App app = new App();
app.InitializeComponent();
app.Run();
}
无论我做什么,我都会得到“System.Reflection.TargetInvocationException”异常。
有什么帮助吗?
PS。更多调试显示它无法加载最初位于我要加载的程序集中的“mainwindow.xaml”资源
{System.IO.IOException: Nie można zlokalizować zasobu „mainwindow.xaml”.
w MS.Internal.AppModel.ResourcePart.GetStreamCore(FileMode mode, FileAccess access)
w System.IO.Packaging.PackagePart.GetStream(FileMode mode, FileAccess access)
w System.IO.Packaging.PackagePart.GetStream()
w System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties)
w System.Windows.Application.DoStartup()
w System.Windows.Application.<.ctor>b__0(Object unused)
w System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
w System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
w System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
w System.Windows.Threading.DispatcherOperation.InvokeImpl()
w System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
w System.Threading.ExecutionContext.runTryCode(Object userData)
w System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
w System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
w System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
w System.Windows.Threading.DispatcherOperation.Invoke()
w System.Windows.Threading.Dispatcher.ProcessQueue()
w System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
w MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
w MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
w System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
w System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
w System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
w System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter)
w System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
w MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
w MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
w System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
w System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
w System.Windows.Threading.Dispatcher.Run()
w System.Windows.Application.RunDispatcher(Object ignore)
w System.Windows.Application.RunInternal(Window window)
w System.Windows.Application.Run(Window window)
w System.Windows.Application.Run()
w WpfApplication1.App.Main()}
所以我怀疑,问题是CLR试图在加载器应用程序中找到.xml,而不是在实际的wpf应用程序中。