当我启动我的 WPF 应用程序并转到InitializeComponent
一个用户控件的函数调用时,它会静默退出,并且只在输出窗口中留下一条消息,说 Managed (v4.0.30319)' has exited with code -1073740771
( 0xc000041d
)。当我说“静默”时,我的意思是即使我用-块包装这个InitializeComponent
调用也没有捕获到异常(这就是我通常发现问题所在的方式)try
catch
这是我所做的:在这个应用程序项目中,我们需要使用参考 Microsoft.Office.Interop.Owc.dll,版本号为 10.0.4504.0。由于它是一个互操作库,所以当我在 VS2012 中添加此引用时,它会自动将该属性设置Embedded Interop Types
为 true,我认为这意味着它不会在输出文件夹中保留单个 dll,而是将此库嵌入到主输出中(至少这就是我们在其他参考资料中的表现,例如 Microsoft.Office.Interop.Outlook.dll)。然而,当我启动这个项目时,它抛出了一个XamlParseException
说法:
“无法加载文件或程序集 'Microsoft.Office.Interop.Owc, Version=10.0.4504.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。系统找不到指定的文件。”:“Microsoft.Office .Interop.Owc,版本=10.0.4504.0,文化=中性,PublicKeyToken=31bf3856ad364e35""
好像没有嵌入引用(或者版本不正确。但我验证了引用版本确实是10.0.4504.0)
接下来我将这个 dll 直接复制到输出文件夹bin\Debug\
,以确保它可以找到这个库。这次没有抛出异常,但整个应用程序就像我在开始时描述的那样默默地退出。我试图用谷歌搜索代码-1073740771
(0xc000041d
),但没有关于它的文章。我试图将其设置Embedded Interop Types
为真/假,但问题是一样的。
更新:
我想在这里添加更多描述。如上所述,有问题的库是 OWC(Office Web Component)10。我按照此链接使 OWC 与 VB.NET 桌面应用程序一起工作:如何:在 Visual Studio .NET 中处理 Office Web 组件的事件。但是这篇官方文章太老了,所以我不得不做很多修改来编译包装器 dll(主要是因为命名空间不匹配)。然后,当我添加对实际互操作库 Microsoft.Office.Interop.Owc 的引用时,如果我遵循默认设置并让 Embedded Interop Types 为 True,在运行时它会抱怨(抛出XamlParseException
) 无法加载程序集(参见上面的描述)。我勒个去?我认为将其设为“嵌入式”可以保证找到该库。然后我将此 dll 复制到输出文件夹,然后我有这个静默退出问题。但可能值得一提的是,这次输出窗口显示Microsoft.Office.Interop.Owc.dll
确实已加载。实际上它是消息之前的最后一条managed has exited
消息。所以它必须仍然与这个库有关。
所有这一切都只发生在 OWC10 上。实际上,在 OWC11 中也有类似的方法(最新的,但不幸的是,它仍然是 Office2003 附带的旧版本):如何:在 Visual Studio .NET 中处理 Office 2003 Web 组件的事件。但它确实有效,并且控件显示在我的应用程序上。由于其他一些原因,我想尝试 OWC10 而不是 OWC11