2010-07-07 2 views
7

웹 사이트의 예제에서 PostSharp는 기본 시스템 어셈블리에서 호출을 가로 채기위한 데모를 제공합니다. 몇 번 시도하고 어셈블리에 대한 인터셉트 콜을 복제하려고 시도했지만 소스 코드가 없으므로 성공하지 못했습니다.PostSharp on assemblies 소스가 없습니다.

내 접근 방식은 단순히 계측기에 넣고 싶은 네임 스페이스와 메서드를 대상으로 어셈블리 수준 특성을 배치하는 것이 었습니다. 이것은 나를 위해 일한 적이 없다.

뭔가 같은 :

[조립 : (". My.BusinessLayer *" "MyCategory", AttributeTargetTypes =) 추적]

내가 여기서 뭔가를 놓치고 있습니까? 소스를 가져 오지 않은 경우 어셈블리에서 계측 aspect의 런타임 주입을 수행 할 수 있습니까? 나는 런타임 주사를 할 수 있다고 생각했다 ...

고마워.

답변

5

당신은 지정하여 다른 어셈블리 방법을 추적 할 수 있습니다 :

[assembly: Trace("MyCategory", 
       AttributeTargetAssemblies="xyz", 
       AttributeTargetTypes = "My.BusinessLayer.*")] 

그러나, 외부 어셈블리가 수정되지 않습니다! 현재 프로젝트에서 외부 어셈블리로의 호출 만 수정할 수 있습니다.

소스가없는 어셈블리를 수정하는 것은 현재 쉽지 않습니다. 이것은 가능하지만 고급 시나리오로 간주되며 사용자 지정 코딩이 필요합니다.

+0

Gael, So ... 만약 내가 단위 테스트를 만들었고 "고비용"방법이기 때문에 메소드 호출을 가로 채길 원한다면 ... 위에서 말한 것처럼 가로 채기를 추가 할 수는 있지만 단위 직접 호출 한 경우 테스트 호출이 가로 챌 것입니다. 그러나 같은 메서드 호출을 테스트하는 어셈블리는 아닙니다. 내가 그렇게하고 싶다면, 나는 테스트하고있는 어셈블리에 절편을 가져야 할 것입니까? - 위에서 설명한 고급 시나리오의 예가 있습니까? 나는 그것을 보는 것에 매우 흥미가있을 것입니다. – pinvoke

+0

예, 그게 전부입니다. 어셈블리 A와 B, B 참조 A가 있다고합시다. A와 B 모두 Thread.Sleep 메서드를 호출합니다. 프로젝트 B에서는 Thread.Sleep에 aspect를 추가했다. B에서 Thread.Sleep으로의 호출 만 A에서 호출하지 않고 인터셉트합니다. –

+0

P-Invoke를 좋아하는 것 같기 때문에 P-Invoke 메소드에 aspect를 넣는 것도 가능합니다 :). –