2013-03-26 4 views
7

최근에 웹에서 코딩에 대해 살펴 보았습니다. 어떤 사람들은 catch 블록에 Microsoft.VisualBasic.CompilerServices.ProjectData.ProjectData 클래스를 사용하는 것을 발견했습니다.사람들이 ProjectData를 사용하는 이유

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

이 API는 .NET Framework 인프라를 지원하며 사용자 코드에서 직접 사용할 수 없다고 언급 한 msdn에서 검색했습니다.

사람들이 어떤 이유로 그것을 사용하는지 궁금합니다. 나 한테 설명 해 줄래?

+0

첫눈에, 저자는이 예외를 내부 VB 오류로 설정하려고합니다. 질문은 아마 당신이 말하는 코드의 저자에게 가야합니다. – Dhawalk

+0

리플렉터를 사용하여 VB로 작성된 어셈블리를 디 컴파일하는 경우 VB 컴파일러가 자동으로 그러한 호출을 많이 주입한다는 것을 알 수 있습니다 –

답변

7

VB6에서 변환 된 C#/VB.NET 프로젝트에서이 코드 사용이 발견되었습니다. 새로운 C#/VB.NET 솔루션/프로젝트를 개발할 때는이 방법을 사용하지 않아야합니다.

참고 :이 기술은 다른 .NET 솔루션/프로젝트에서 사용했던 적절한 예외 처리로 바꿀 수 있습니다.

2

이 코드는 VB 코드를 C#으로 변환하거나 VB를 사용하여 원래 만든 어셈블리를 역 컴파일 한 코드 변환 도구에서 생성됩니다.

내가 모노에 VB 프로젝트를 포팅하고, VB 컴파일러는 이러한 호출 ProjectData.SetProjectError(exception) 및 catch 블록에서 ProjectData.ClearProjectError()을 주입 것을 발견하고, 모노하지 않기 때문에 그렇게에서 컴파일러를 방지 할 수있는 방법을 찾으려고 해요 ProjectData 모듈을 구현하십시오. 내 연구를하면서 질문을 찾았습니다!

0

그래서 이것은 관심있는 사람들을 위해 오래된 레거시 vb6의 결과입니다. vb6이 시작되었을 때 여전히 주위에 있지만 vb에서 projectdata 객체로 이동 한 오류 객체가있었습니다. 나 같은 사람이 vb6를 기억한다면 (이것은 공룡이 지구를 돌아 다녔을 때 다시 나타납니다), 다음에 오류 재개에 대한 간단한 전화가있었습니다. 이것은 당신이 그 성가신 작은 예외를 좋아하지 않는 경우입니다. 대부분의 vb6 프로그램은 그것을 아주 많이 사용했고, 당신이 무시했기 때문에 예외가 없었습니다. 여기에 설명이옵니다.

캐치 (예외 exception1) // 사람이 실제로 당신이 완전히 볼 수

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

를 확인하고자하는 경우 단지 // Err 개체에

{ 

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

일어난 예외를 잡을 예외를 무시하고 실제 vb6 방식에서는 코드가 설명없이 폭발합니다. 말할 필요도없이 이런 식으로 코드를 작성하거나 이런 방식으로 VB를 사용한다면, 나는 당신을 찾아 감옥에 가게하는 방법을 찾아 낼 것입니다.

관련 문제