2010-03-19 6 views
6

외부 고객에게 여러 어셈블리를 제공하지만 모든 공용 API가 공식적으로 지원되는 것은 아닙니다. 예를 들어, 최적의 디자인 선택이 적합하지 않기 때문에 나머지 코드가 작동하기 위해 유형이 어셈블리에서 공개적으로 노출되어야하지만 고객이 해당 유형을 사용하는 것을 원하지는 않습니다. 지원 부족을 전달하는 한 부분은 XML 주석의 형태로 인텔리 센스를 제공하지 않습니다.선택적으로 C#에서 XML 코드 주석을 표시하지 않습니까?

XML 주석을 선택적으로 억제하는 방법이 있습니까? 나는 장기간 유지 관리 문제이므로 1591 경고를 무시하는 것 이외의 것을 찾고 있습니다.

예 : 공용 클래스 A와 B가있는 어셈블리가 있습니다. A는 공식적으로 지원되며 XML 문서가 있어야합니다. B는 외부 사용을위한 것이 아니므로 문서화해서는 안됩니다. XML 문서를 켜고 1591 경고를 표시하지 않을 수 있습니다.하지만 나중에 공식적으로 지원되는 클래스 C를 추가 할 때 컴파일러에서 XML 문서를 추가하지 못했음을 알리고 싶습니다. 내가 프로젝트 레벨에서 1591을 억압했다면 이것은 발생하지 않을 것입니다. 나는 전체 클래스에 걸쳐 #pragma를 할 수 있다고 생각하지만, 이것을하기위한 더 좋은 방법이있는 것처럼 보입니다.

답변

3

인텔리 센스를 전혀 제공하지 않으시겠습니까?

///<summary>A documentation</summary> 
public class A { } 

///<summary>B documentation. This class is not supported...</summary> 
[EditorBrowsable(EditorBrowsableState.Advanced)] 
public class B { } 

///<summary>C documentation</summary> 
public class C { } 

이 방법, 당신은 여전히 ​​지원되지 않는 클래스 (내부 사용자도 중요하다!) 문서화 및 인텔리에 그들을 볼 외부 사용자가있을 수 있습니다. 내부적으로, Visual Studio에서 이러한 고급 구문을 "볼 수"있습니다. 고급 속성은 인텔리 및 도구 아래에있는 고급 멤버 숨기기 설정으로 속성 창에 표시 할 때

는 비주얼 C#에서

, 당신이 제어 할 수 있습니다 | 다음 EditorBrowsableAttribute에 대한 페이지가 어떻게 우리에게 알려줍니다 옵션 | 텍스트 편집기 | 기음#. 해당 EditorBrowsableState는 고급입니다.

5

internal을 작성하고 노출하는 어셈블리에 [assembly: InternalsVisibleTo("AssemblyName")] 속성을 추가하십시오.

+0

아아 나는 많은 양의 코드를 다루므로 실용적이지 않습니다. –

+3

@Mike Post 공개 API를 비공개 API와 별도로 유지하는 것이 첫 번째 관심사 였을 것입니다. 그렇다면 리팩토링을 많이해야합니다. 거기에 대한 빠른 수정 및 John 실제로 제안 일종의 깔끔한, 당신이 다른 * 친구 * 어셈블리에 내부 메서드를 노출 할 수 몰랐다. –

2

#pragma의 지침을 enable or disable specific warnings에 사용해보세요.

///<summary>some documentation</summary> 
public class A{ 
    //... 
} 

#pragma warning disable 1591 
public class B{ 
    //... 
} 
3
XML 주석의 형태로 어떤 인텔리을 제공하지 않는 지원의 부족을 통신

한 부분입니다.

는 대신하지 외부 사용을위한 간단한 < 요약 > 이러한 방법을 언급 없습니다. </요약 > 의견?

관련 문제