2010-12-17 2 views
17

나는 DebuggerDisplay 속성을 좋아합니다. 나는 그것을 아주 좋아한다. 내가 소스 코드를 가지고 있지 않은 유형에 그것을 사용하고 싶다.DebuggerDisplay 특성이 소유하지 않는 형식에 적용될 수 있습니까?

이것이 가능합니까?

+0

일부를 어셈블리 레벨에서 DebuggerTypeProxy가 작동하기를 바랍니다. 그렇지 않았습니다. –

+0

@Hans Passant - 직접 시도하지는 않았지만이 기사 http://blog.jalil.org/2008/02/18/how-to-determine-event-subscribers/는 a에서 DebuggerTypeProxy를 사용한 예를 보여줍니다. 외국 의회. –

답변

19

예 (System.Collections.Generic.KeyValuePair < TKEY, TValue>)에있는 AssemblyInfo.cs에 다음을 추가

using System.Collections.Generic; 
using System.Diagnostics; 

[assembly: DebuggerDisplay("[Key={Key}, Value={Value}]", Target = typeof(KeyValuePair<,>))] 

(VS2015 시험)

1

속성은 컴파일 타임에 무언가 (유형, 메서드, 필드 등)를 장식하는 방법이며 어셈블리의 이진 표현에 저장됩니다. 새 속성을 추가하는 한 가지 방법은 코드를 새 속성으로 다시 컴파일하는 것입니다. 코드가 없으면 일부 경우 어셈블리를 디 컴파일하여 코드를 가져올 수 있습니다.

내가 생각할 수있는 또 다른 방법은, DebuggerDisplay와 다른 어셈블리가 원하는 유형 (여기 an example의)

21
에 추가 어셈블리의 모든 유형을로드하고 처리하기 위해 반사를 사용하고 (반사를 통해) 생성 할 수 있습니다

예. 실제로 Microsoft는 Visual Studio에서이 옵션을 내장 옵션으로 만들 정도로 훌륭했습니다.

어셈블리에 외부 형식에 DebuggerDisplay 특성을 적용하는 방법에 대한 예제는 "My Documents \ Visual Studio 20XX \ autoexp.cs"를 찾아보십시오. 그런 다음 자신의 일부를 추가하고 다시 컴파일 한 다음 autoexp.dll을 바꾸고 Visual Studio를 다시 시작하십시오. 그냥 일해야합니다. 참고로

, 또는 this MSDN article


에서 노란색 "주의"단락 참조 : 심지어이 필요없이, 훨씬 덜 소란이 일을 할 수있는 purchasable extension to Visual Studio의 창조자 해요을 디버깅 세션을 중지합니다. 외부 DebuggerDisplay 유형을 설정

+0

좋은 답변 - autoexp 솔루션을 사용해 보았습니다. 디버거 디스플레이를 변경하려는 타사 코드가 엔티티 프레임 워크 내부에 있습니다. 내가 포함하지 않았기 때문에 autoexp 컴파일이 실패했다. 내가 할 수 있다면/다른 제 3 자 라이브러리를 편집에 포함시켜야한다는 것을 알고 싶습니까? – user3141326

+0

여기에 전체 지침이 나와 있습니다. http://www.tech-archive.net/Archive/VisualStudio/microsoft.public.vsnet.debugging/2006-08/msg00038.html 문제없이 작동합니다. Visual Studio를 다시 시작할 필요가 없습니다. autoexp.dll 컴파일 후 F5를 누르면됩니다. 좋은 답변 주셔서 감사합니다. – user3141326

+0

VS2015에서도 autoexp.cs는 존재하지 않습니다. https://stackoverflow.com/questions/33394892/modifying-external-debuggerdisplay-with-autoexp-cs-in-visual-studio-2015를 참조하십시오. – IvanH

관련 문제