문제

나는 내가 일하는 대규모 레거시 ASP.NET 애플리케이션을 상속했으며, 우리 회사는 FXCOP을 사용하고 모든 주요 규칙 위반을 수정하기를 원한다. 현재 보급되는 규칙은 다음과 같습니다.

CA1405 : COM 보이는 유형 기본 유형은 COM 보이는 / P>

응용 프로그램의 모든 ASP.NET 페이지 / 컨트롤 이이 규칙을 위반하는 것으로 보입니다. 나는 처음에 왜 그런지 확신하지 못했지만 결국 나는 그것이 다음의 상속 체인 때문인 것임을 깨달았습니다.

System.IDisposable
  → System.Web.UI.Control
    → System.Web.UI.TemplateControl
      → System.Web.UI.Page
.

나는 또한 IDisposable가 다음과 같이 정의되었다 :

[ComVisible(true)]
public interface IDisposable
{
  void Dispose();
}
.

요약 : 모든 ASP.NET 페이지 / 컨트롤은 IDisposable에서 상속되고 IDisposable[ComVisible(true)] 속성을 가지고 있으므로 모든 페이지 / 컨트롤 이이 규칙에 실패합니다.

우리의 응용 프로그램은 수천 개의 페이지와 컨트롤과 수천 개의 위반이 있었기 때문에 우리를 상처립니다. "회사 표준"FXCOP 규칙 세트가있는 경우 규칙을 비활성화하는 것은 옵션이 아닙니다. FXCOP가 우리가 우리 신청서의 모든 단일 페이지 에이 속성을 옮길 수 있기를 원한다는 것으로 보입니다.

내 질문은 IDisposable가 처음에는 [ComVisible(true)] 속성을 갖는 이유는 무엇입니까?

도움이 되었습니까?

해결책

IDisposable은 .NET 구성 요소가 COM 응용 프로그램에서 사용될 때 자원 처리를 허용하기 위해 COMVISIBLE로 표시됩니다.

우리는 VB6 응용 프로그램에서 전체 .NET 응용 프로그램으로 전환 할 때 실제로 이렇게 사용했습니다. 우리는 AA 레거시 VB6 응용 프로그램에서 .NET 기능 (데이터베이스 액세스)을 재사용 할 수 있었지만 IMSISPOSE 인터페이스를 사용하여 그러한 것들을 보장해야했습니다.객체를 사용하여 수행 할 때 데이터베이스 연결이 올바르게 정리되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top