为什么 DocData.LoadDocData 中的异常不会阻止视图打开?

Why does exception in DocData.LoadDocData does not prevent the view from opening?

我正在为这个而苦苦挣扎。

我有一个 Visual Studio 包,它注册了一个自定义编辑器工厂来创建自定义文档数据和自定义文档视图。

在 DocData 的 LoadDocData 方法中,当我创建文档时,如果打开的文件已损坏,则会引发 InvalidOperationException。

这里的问题是我不想打开相应的视图但是Visual Studio显示错误消息但它仍然打开视图。

这里有什么问题?

protected override int LoadDocData(string fileName, bool isReload)
{
    // Clear errors

    this.DocumentData.ClearErrorListItems();

    // Catch errors

    try
    {
        base.LoadDocData(fileName, isReload); // InvalidOperationException raised here
    }
    catch (Exception)
    {
        if (this.DocumentData.ErrorListProvider != null)
        {
            this.DocumentData.ErrorListProvider.ShowErrorOnIdle();
        }

        throw;
    }

    return VSConstants.S_OK;
}

感谢您的帮助!

这里的问题是我的自定义文档视图不是 ModelingDocView 的子类。

我发现,通过使用 ILSpy 分析 DocData.LoadDocData 中的源代码,它只关闭从 ModelingDocView 派生的视图。

public int LoadDocData(string fileName)
{
    this.codeMarkers.CodeMarker(8206);
    this.OnDocumentLoading(EventArgs.Empty);
    try
    {
        this.LoadDocData(fileName, false);
    }
    catch (Exception ex)
    {
        if (CriticalException.IsCriticalException(ex))
        {
            throw;
        }
        this.HandleLoadDocDataException(fileName, ex, false);
        foreach (ModelingDocView current in new List<ModelingDocView>(this.DocViews))
        {
            if (current != null)
            {
                ErrorHandler.ThrowOnFailure(current.Frame.CloseFrame(65792u));
            }
        }
        return 0;
    }
    this.loaded = true;
    this.OnDocumentLoaded(EventArgs.Empty);
    this.codeMarkers.CodeMarker(8207);
    return 0;
}