2011-11-16 2 views
6

특정 메서드가 호출되면 컴파일 타임 오류를 만드는 방법이 있습니까?.NET 코드가 특정 메서드를 호출하지 못하게합니까?

예를 들어, 특정 프로젝트의 코드에서 System.Configuration.ConfigurationManager.AppSettings()를 호출하지 못하게하려고합니다. 해당 메서드가 호출되면 컴파일 시간 오류를 발생 시키려면 프로젝트 또는 클래스 파일에 태그를 지정하는 방법이 있습니까?

나는이 생각을하는 유일한 방법은 이러한 호출에 플래그를 지정하고 그런 식으로하는 FxCop 규칙을 생성하는 것이지만 다른 아이디어에 대해서는 개방적이라고 생각합니다.

.NET 3.5를 사용 중입니다. 4.0 코드 계약이 이것을 할 수 있는지 확실하지 않습니다.

업데이트

은 내가 특별히하지, 프레임 워크 방법에 대해 내 자신을 이야기하고, 그래서 나는 그들에게로 폐기를 표시 할 수 없습니다.

이 시점에서 나는 반사에 신경 쓰지 않습니다.

또 다른 예는 System.Web.HttpUtility.HtmlEncode로, Microsoft의 AntiXss 라이브러리를 찾아서 바꾸고 싶지만 새 코드를 확인하는 서버를 빌드 할 때 어떤 종류의 검사 프로세스를 통합하고 싶습니다. .

+0

이 너무 반사를 통해이 메서드를 호출 허용 하시겠습니까 : 당신이) 필요하면 erated? – Vlad

+1

자신의 어셈블리 였고 다시 컴파일 할 수있는 경우 Obsolete 특성을 사용할 수 있습니다. – asawyer

+0

당신이 그것을 사용하기를 원하지 않는다면 왜 시작해야할까요? –

답변

2

도구 NDepend을 사용할 수 있습니다. 면책 조항 : 나는 도구의 개발자 중 한 명입니다.

Code Rules over LINQ Queries (CQLinq)을 작성하여 메소드 호출과 같이 모든 종속성을 검사 할 수 있습니다. 코드 규칙은 성공적으로 컴파일 한 후 checked in Visual Studio이 될 수도 있고 rules can be checked at build process time이 될 수도 있습니다.

이러한 CQLinq 코드 규칙은 볼 수 같은 :

warnif count > 0 
from m in Application.Methods   
where m.IsUsing("System.Configuration.ConfigurationManager.get_AppSettings()") 
select m 

규칙은 get_AppSettings() getter 메소드를 호출 방법을 포함, 정규식과 일치 예를 들어 이름 공간을 금지하는 충동에서 전문 수 있습니다

NDepend dependency matrix 또는 dependency graph에서
warnif count > 0 
from m in Application.Namespaces.WithNameLike("regex").ChildMethods() 
where m.IsUsing("System.Configuration.ConfigurationManager.get_AppSettings()") 
select m 

, 당신은 마우스 오른쪽 종속성 (매트릭스 셀 또는 그래프 화살표)를 클릭하고 의존성이 존재하는 경우 경고 코드 규칙을 생성 할 수 있습니다 (다음 규칙 세대를 전문

enter image description here

+0

NDepend UI. CruiseControl.NET/NAnt 빌드 스크립트에이 스크립트를 통합 할 수 있는지 확인해야합니다. 그게 가능하니? – slolife

+0

예, 가능합니다. CC.NET 통합 관련 문서 : http://www.ndepend.com/Doc_CI_CCNet.aspx를 읽어보십시오. –

4

당신은 write your own rules in FxCop 일 수 있으므로 그게 아마도 옵션입니다.

그러나이 경우 기존 코드 기반의 경우 "ConfigurationManager.AppSettings"에 대한 편집기에서 Ctrl-F (찾기)를 사용하면 훨씬 적은 노력으로도 똑같이 훌륭한 작업을 수행 할 수 있습니다 ... 안부 개발 팀에 이메일 메모를 보내는 더 인간적인 경로를 고려할 수도 있지만 향후 시행에 이르기까지 ...

위의 주석 작성자가 강조하고 비슷한 목표를 가진 다른 사람들에게 주목할 가치가있는 것은 다음과 같습니다. 자신의 코드베이스 (이 질문은 이 아니고이 아닙니다)에서 [Obsolete] 속성을 사용할 수 있습니다.

+0

전자 메일 **이 ** 작동해야한다는 데 동의하지만 검증에 대해서는 좀 더 구체적으로 설명하겠습니다. – slolife

+1

아마도 코딩 표준을 위반 한 나머지 6 팩의 맥주를 나머지 팀원에게 빚진 팀에게 말할 수 있습니다!? 모든 심각성에서 FxCop은 사용자 정의 규칙을 사용하여 유효성을 검사하는 데 도움이되지만 개발자 (또는 빌드 서버)가 규칙을 설치하고 FxCop을 올바르게 사용할 때만 가능합니다. – Reddog