2013-03-26 2 views
7

Недавно я просмотрел некоторые кодировки в Интернете. Я нашел, что некоторые люди используют Microsoft.VisualBasic.CompilerServices.ProjectData.ProjectData класс в блоке catch.Почему люди используют ProjectData

catch (Exception exception1) 
     { 
      //ProjectData.SetProjectError(exception1); 
      Console.WriteLine(exception1.ToString()); 
      Console.WriteLine(); 
      Console.WriteLine(sSQL); 
      //ProjectData.ClearProjectError(); 
     } 

Я искал его на MSDN, что упомянуто, что этот API поддерживает платформу .NET Framework инфраструктуру и не предназначен для использования непосредственно из вашего кода.

Мне любопытно, почему люди используют его. Вы мне это объясните?

+0

На первый взгляд, я считаю, автор пытается установить это исключение как внутреннюю ошибку VB. вопрос должен, вероятно, обратиться к автору кода, на который вы ссылаетесь. – Dhawalk

+0

Если вы декомпилируете сборку, построенную на VB с помощью рефлектора, вы обнаружите, что компилятор VB тихо вводит много таких вызовов –

ответ

7

Мой опыт в том, что этот тип использования кода находится в проектах C#/VB.NET, которые были преобразованы из VB6. При разработке новых решений/проектов C#/VB.NET эта практика не должна использоваться.

Примечание: этот метод можно безопасно заменить надлежащей обработкой исключений, которую вы будете использовать для других решений .NET/проектов.

2

Этот код либо испускается инструментом преобразования кода, который преобразует код VB в C#, либо является результатом декомпиляции сборки, которая была изначально создана с использованием VB.

Я портирование VB проекта на Mono, и выяснил, что VB компилятор вставляет эти вызовы ProjectData.SetProjectError(exception) и ProjectData.ClearProjectError() в любом блоке улова, и попытаться найти способ, чтобы предотвратить компилятор от этого, потому что Mono не реализовать модуль ProjectData. И нашел ваш вопрос во время моих исследований!

0

так что это результат старого наследия vb6 для заинтересованных. при запуске vb6 появился объект err, который все еще находится вокруг, но переместился в объект projectdata в vb. если кто-нибудь вроде меня помнит vb6 (это вернулось, когда динозавры бродили по земле), в следующий раз появился удобный небольшой вызов об ошибке. это если вам не нравятся эти досадные небольшие исключения. большинство программ vb6 использовали его обильно, и у вас не было никаких исключений, потому что вы проигнорировали их. поэтому здесь идет объяснение.

улов (Исключение exception1) // отлавливать все исключения, которые только случились

{ 

     ProjectData.SetProjectError(exception1); // set the information 

// в объекте ERR, если кто на самом деле хочет, чтобы проверить

 ProjectData.ClearProjectError(); //clear the err object 
    } 

, как вы можете видеть, что это полностью игнорируя любые исключения и действуя в режиме vb6, ваш код просто взрывается без каких-либо объяснений. нет необходимости говорить, что если кто-то пишет такой код или использует vb таким образом, я найду вас и выясню способ заставить вас заключить в тюрьму.

Смежные вопросы