为什么是Excel.互操作返回错误的HResult而不是FILE_NOT_FOUND?



我一直在尝试使用以下代码加载excel文件-

_workbook = await Task.Run(() =>
{
return _excelApp.Workbooks.Open(fileName);
}).ConfigureAwait(false);

如果我在fileName参数中提供一个不存在的文件名,它会抛出一个通用的COMException,错误代码如下-0x800a03ec

根据互操作文档,.NET运行时应该将HResult转换为特定的异常- https://learn.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.comexception?view=net-5.0

对于这个特定的情况,我期望得到一个FileNotFoundException而不是通用的COMException。但是由于HResult不是FILE_NOT_FOUND,它抛出了通用的COMException。我的问题是为什么互操作返回错误的HResult?我在这里做错了什么,还是Excel.Interop有bug ?

不,文档中没有说明。它说:

公共语言运行库转换众所周知的

0x800a03ec的任意Excel HRESULT不是"众所周知的",因此。net不知道如何处理它,因此它仍然是COMException

最新更新