WPF抛出异常解析包含Winforms用户控件的XAML

Bri*_*art 7 c# wpf xaml user-controls winforms

我有一个WPF应用程序,它使用我使用C++/CLI创建的Winforms用户控件.当我的应用程序为我的主窗口解析XAML时,它会抛出异常.这些信息似乎略有缩略,但它说:

A first chance exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll

Additional information:   is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)  Error in markup file 'OsgViewer;component/osgviewerwin.xaml' Line 1 Position 9.
Run Code Online (Sandbox Code Playgroud)

我在XAML中注释掉了我的Winforms控件,一切都很好.我想也许我的控件的构造函数做了一些坏事,所以我在其中放了一个断点,但是当我开始运行应用程序时,断点似乎没有启用,并且从未被命中,我理解为DLL包含该行未加载.当DLL中的类型的对象被实例化时,最有可能导致抛出异常 - 无法找到对象的构造函数的主体.

我过去在一个不同的项目上成功完成了这个,所以我从该应用程序中引入了一个不同的WinForms用户控件,并在XAML中实例化,并且一切正常.

所以这是这个DLL中的东西.我在我的WPF C#app中引用了DLL,当我在对象浏览器中加载DLL时,所有必需的类和命名空间都显示正常.该应用程序编译正常,解析XAML时问题就出现了.有谁见过这样的东西?关于可能导致这种情况的任何想法?调试的想法呢?谢谢!

<Window x:Class="OsgViewer.OsgViewerWin"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:int="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
    xmlns:myns="clr-namespace:MyGlobalNS.MyNS;assembly=MyAssembly"
...
        <int:WindowsFormsHost x:Name="m_Host">
            <myns:CMyClass  x:Name="m_MyClass" />
        </int:WindowsFormsHost>
...
</window>
Run Code Online (Sandbox Code Playgroud)

EFr*_*ank 10

我遇到过类似的问题(但没有完全相同的错误信息).似乎WPF无法实例化您的Winforms用户控件.

挑战在于找出原因.以下是我可以尝试的建议:

  1. 检查是否已启用非托管调试(在"项目属性" - >"调试"中)
  2. 找出实现Winforms控件的C++/CLI DLL是否存在任何依赖关系,以及是否无法解析这些依赖关系.
    为了找出对本机DLL的依赖性,您应该使用工具Dependency Walker(depends.exe)..NET Reflector将仅检查托管依赖项.
  3. 逐步注释Winforms用户控件的代码,然后重试.
  4. 使用Gflags.exe打开Loader Snaps(参见调试LoadLibrary失败)