当我启动我的WPF应用程序并且当它进入InitializeComponent
函数调用一个用户控件时,它静静地退出并且只在输出窗口中留下一条消息说托管(v4.0.30319)'已退出代码-1073740771
(0xc000041d
)。当我说“默默”,我的意思是,如果我把这个包InitializeComponent
通话用try
也不例外甚至陷入 - catch
块(这就是我通常会找到问题的所在)WPF应用程序显示托管已在InitializeComponent调用中退出,代码为-1073740771(0xc000041d)调用
这是我做的:在这个应用程序项目我们需要使用参考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,版本= 10.0.4504.0, 文化=中性公钥= 31bf3856ad364e35 '或它的一个依赖 找不到指定的文件系统。 “:” Microsoft.Office.Interop.Owc,版本= 10.0.4504.0, 文化=中性公钥= 31bf3856ad364e35 “”
它似乎该参考没有嵌入(或版本不是正确的,但我确认参考版本确实是10.0.4504.0)
接下来我将此dll直接复制到输出文件夹bin\Debug\
,以确保它可以找到此库。这一次不会抛出异常,但是整个应用程序就像我在开始时描述的那样静静地退出。我试图谷歌代码-1073740771
(0xc000041d
),但没有关于它的文章。我试图将Embedded Interop Types
设置为true/false,但问题是相同的。
更新:
我想在此处添加更多描述。如上所述,有问题的库是OWC(Office Web Component)10。我跟着这个链接使OWC与VB.NET桌面应用程序一起工作:HOW TO: Handle Events for the Office Web Components in Visual Studio .NET。但这篇官方文章太旧了,所以我不得不做很多修改来编译包装器DLL(主要是因为命名空间不匹配)。然后,当我添加对实际互操作库Microsoft.Office.Interop.Owc的引用时,如果我按照默认设置并将嵌入式互操作类型设置为True,则会在运行时抱怨(抛出XamlParseException
)程序集无法加载(见上面的描述)。我勒个去?我认为把它作为“嵌入式”可以保证找到这个库。然后我复制这个DLL到输出文件夹,然后我有这个静静地退出问题。但可能值得一提的是,这次输出窗口显示Microsoft.Office.Interop.Owc.dll
确实已加载。实际上这是managed has exited
消息前的最后一条消息。所以它仍然必须涉及这个图书馆。
所有这些只发生在OWC10中。实际上,在OWC11中也有类似的方法(最新版本,但不幸的是,它与Office2003一起使用时仍然很旧):HOW TO: Handle Events for the Office 2003 Web Components in Visual Studio .NET。但它实际上起作用,控件显示在我的应用程序中。这是因为,我想尝试OWC10代替OWC11
尝试打开所有例外。 – Tomtom 2013-03-27 09:50:07
@Tomtom我已经把所有的异常(我在用户未处理下启用了所有的东西)。另外,就像我之前提到的,我直接使用try-catch块来调用InitializeComponent,并在catch中设置断点,它不能保证异常(如果有的话,我不确定)会被捕获吗? – tete 2013-03-27 10:26:10
这是一个很不起眼的低级别操作系统异常。我猜测你在64位版本的Windows上运行Vista或Win7平台的目标设置为x86,并在输出窗口中看到“第一次机会”异常通知。如果这是一场比赛,那么将这些细节添加到您的问题。 – 2013-03-27 12:07:39