문제

알겠습니다. 이런 종류의 다음은 내 이전 질문 .

정말로하고 싶은 것은 빌드를 중단 하는 메소드를 꾸밀 수있는 일종의 속성을 만드는 것입니다. Obsolete ( "reason", true) 속성과 매우 유사하지만 쓸모없는 코드를 잘못 식별하지 않습니다.

명확하게 : ANY F6 (빌드) 프레스에서 빌드를 중단하고 싶지 않습니다. 메서드가 다음과 같이 장식 된 경우에만 빌드를 중단하고 싶습니다.속성은 코드의 다른 곳에서 호출됩니다.내가 말했듯이 구식과 유사 하지만 동일하지는 않습니다.

기타사용자가 다른 이유로 사용하고 싶어합니다 .이전에 사용자 지정 속성을 생성 한 적이 없으므로 완전히 새로워졌습니다!

도움이 되었습니까?

해결책

XML 직렬화 및 NHibernate 용인 경우 매개 변수없는 생성자에 액세스 할 수 있도록하려는 경우 ( 참조), 직렬화를 위해 private 또는 protected 매개 변수없는 생성자를 사용하거나 NHibernate에 대해 보호 된 생성자를 사용합니다.보호 된 버전을 사용하면 해당 코드를 호출 할 수있는 상속 된 클래스를 사용할 수 있습니다.

메서드를 호출하는 코드를 원하지 않는 경우 액세스 가능하게 만들지 마십시오.

편집 : 더 깊은 질문에 답하기 위해 AFAIK 컴파일러는 세 가지 속성 만 알고 있습니다. 사용되지 않음, 조건부 및 AttributeUsage .다른 속성에 대한 특수 처리를 추가하려면 컴파일러를 수정해야합니다.

다른 팁

이것이 Microsoft에 대한 훌륭한 기능 요청이라고 생각합니다. 컴파일러가 어떤 방식으로 처리하거나 컴파일 프로세스에 영향을 줄 수있는 추상 기본 클래스 속성 CompilerExecutedAttribute를 만듭니다.그런 다음이 속성에서 상속하고 다른 작업을 구현할 수 있습니다.오류 또는 경고를 내 보냅니다.

경고 ([단종]에서 발생하는) 빌드 중단을 고려한다면 # warning 컴파일러 지시문.

편집 : 사용 해본 적이 없지만 #error 도 사용할 수 있습니다.

유일한 확실한 방법은 Visual Studio (VSIP를 통해)를 확장하고 올바른 이벤트 (EnvDTE.BuildEvents에있을 수 있음) 클래스를 구독하고 생성자 사용에 대한 코드를 확인한 다음 취소하는 것 뿐이라고 생각합니다.감지하면 빌드하십시오.

이것은 모두 어제 TDWTF 와 비슷하게 들리기 시작했습니다.:-)

나는 Greg의 의견에 동의해야합니다. 속성을 구성합니다.

진지한 사람이라면 생성자가 XMLSerializer가 아닌 다른 장치에 의해 액세스되고 있는지 알아 내고 예외가 발생하면 예외를 던지는 방법을 찾을 수 있습니다.

#error 지시문을 사용하는 것이 좋습니다.

작업을 수행 할 수있는 또 다른 매우 알려지지 않은 속성은 입니다.조건부 속성 (달성하려는 대상에 따라 다름) 라코 디스

"MY_CONDITION"이 정의 된 경우 IL 코드 자체에서 메서드 호출을 제거합니다.

FxCop 규칙을 만들고이를 확인하기 위해 통합 빌드에 FxCop을 추가합니다.

빌드 실패 대신 경고가 표시됩니다.속성은 빌드 시간이 아닌 반영 시간에 '실행'됩니다.

또는 (이것은 다소 불쾌한) 호출하고 싶지 않은 메소드 주위에 컴파일러 지시문을 배치하십시오.그런 다음 호출하면 코드가 손상되지만 올바른 컴파일러 지시문을 전달하고 전달하지 않는 빌드를 설정할 수 있습니다.

빌드 후 단계로 맞춤 예외 및 단위 테스트를 던집니다.

4 년 후 응답 :)

구식의 대안이 있는지 같은 질문이있었습니다.

내가 조금 전에 기억하는 것 (channel9 비디오)에서 Microsoft는 개발자에게 어떤 시점에서 컴파일러 API와 같은 것에 대한 액세스 권한을 부여하기 위해 노력하고 있다고 밝혔으므로 향후에는 다음과 같은 컴파일러 "플러그인"을 작성할 수 있습니다사용자 정의 속성으로 메서드를 장식하고 장식 된 코드가 코드의 다른 곳에서 호출 될 수있는 것처럼 보이면 컴파일러에게 취소하도록 지시 할 수 있습니다.

생각할 때 실제로 꽤 멋질 것입니다.또한 MS가 작업하고있는 컴파일러 API의 진행 상황을 읽어보아야한다는 것을 상기시켜줍니다 ...

만들지 않는 이유는 무엇입니까?알 수없는 속성은 확실히 빌드를 손상시킬 것입니다. 라코 디스

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