2016-11-08 1 views
0

Я борюсь с этим.Почему исключение в DocData.LoadDocData не препятствует открытию представления?

У меня есть пакет Visual Studio, который регистрирует фабрику настраиваемых редакторов для создания пользовательских данных doc и пользовательского представления doc.

В 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; 
} 

Спасибо за любую помощь!

+0

Не могли бы вы предоставить полную демонстрационную версию Via OneDrive. Мы воспроизведем вашу проблему на нашей стороне. –

+0

Я нашел проблему. Проблема заключалась в том, что в DocData.LoadDocData существует цикл, который закрывает фреймы для представлений doc, которые вводятся в ModelingDocView, но мое представление не было подклассом ModelingDocView. –

+0

Вы можете отправить ответ и пометить его как ответ. –

ответ

0

Проблема здесь заключалась в том, что мой пользовательский вид документа не был подклассом ModelingDocView.

Я нашел, проанализировав исходный код в DocData.LoadDocData с помощью ILSpy, он только закрывает представления, полученные из 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; 
} 
Смежные вопросы