문제

는 방법이 있을 수정하는 기존.NET 어셈블리에 의존하지 않고 제 3 자 tools?내가 알고 있는 PostSharp 이것을 가능하게 하지만 그것을 찾을 믿을 수 없을만큼 낭비는 developler 의 PostSharp 기본적으로 다시 작성했다하는 기능의 전체 System.Reflection 네임스페이스하기 위해서는 기존 어셈블리를 수정할 수 있습니다.

System.Reflection.Emit 만 만들 수 있는 새로운 동적 어셈블리입니다.그러나,모든 빌더는 클래스가 여기에 사용되는 상속에서의 기본적인 반사 클래스(예. TypeBuilder 에서 상속 System.Type).불행하게도,거기에있을 것 같지 않는 방법을 강요하는 것,기존의 동적으로 읽어 형식으로 입력 builder.최소 없이 공식적인 지원 방법입니다.

그래서 무엇에 대해 지원되지 않는?지의 백도어는 허용을 로드하는 기존 어셈블리 또는 유형으로 이러한 빌더는 클래스가?

마 나는 는 방법을 찾을 수정하면 현재 어셈블리(이 심지어는 불합리한 요청 시)을 하지만 수정하는 기존 어셈블리드에서 디스크에 있습니다.나는 두려움이 없다 그런 일이지만 여러분께 여쭤보고 싶은 것이 어쨌든.

최악의 경우에,하나의 리조트 ildasm.exe 하는 코드를 분해하고 다음 ilasm.exe 에 대한 재조립지 없 toolchain(읽기:IL 리더)를 포함합니다.NET 작업 IL 데이터(나 있는가?).

/편집:

나는 어떤 특정한 사용한 경우.나는 그냥에 관심있는 일반적인 목적의 솔루션이기 때문에 패치 기존 어셈블리는 아주 일반적인 작업입니다.을 난독 처리기 예를 들어,또는 프로파일러 또는 AOP 라이브러리(예,후기 구현되는 다르게).내가 말했듯이,그것은 보인다 믿을 수 없을만큼 낭비하는 것을 강요하고 다시 쓰기의 큰 부분은 이미 기존 인프라 System.Reflection.


@쐐기:

당신이 맞습니다.그러나,특정 사용하는 경우 여기에.나는 수정 원래의 질문에 이를 반영합니다.나의 관심을 촉발되었으로 또 다른 문제는 asker 는 방법을 알고 싶어 그를 주입할 수 있는 지침 popret 의 끝에 모든 방법을 유지하기 위해서 루츠 Roeder 의 반사체에서 재 설계(VB 또는 C#)소스 코드입니다.

지금 이 시나리오으로 깨달을 수 있습니다수의 도구,예를 들어,PostSharp 위에서 언급하고 Reflexil 플러그인에 대한 반사체,저것은,차례차례로,사용 Cecil 라이브러리입니다.

에서 모든 난 그냥 만족하지 않습니다.NET framework.

@Joel:

그렇다,나는 알고 있으로 이러한 제한이 없어졌습니다.어쨌든 감사해 가리키는 그것 때문에,그것의 중요합니다.

@marxidad:

이처럼 보인다 실현 가능한 유일한 접근 방식이다.그러나,이 의미는 아직도를 다시 전체를 사용하여 어셈블리 빌더는 클래스를,오른쪽?I.e.할 수 있는 전체를 조립합니다.

Hmm,으로 살펴 보겠다.

도움이 되었습니까?

해결책

당신이 사용할 수 있는 MethodInfo.GetMethodBody().GetILAsByteArray(), 고,수정하는 것,그리고 그런 다음 다시 연결로 MethodBuilder.CreateMethodBody().

다른 팁

모노.세실 수도 있습을 제거하는 강력한 이름에서 주어진 어셈블리에 저장하지 않 어셈블리입니다.당신은 당신의 강한 이름이 어셈블리에서,당신은 당신을 수정할 수 있습 IL 대상의 방법과 사용하여 어셈블리는 당신이 어떤 다른 어셈블리입니다.여기에 대한 링크를 제거하기 위한 강력한 이름으로 세실:

http://groups.google.com/group/mono-cecil/browse_thread/thread/3cc4ac0038c99380/b8ee62b03b56715d?lnk=gst&q=strong+named#b8ee62b03b56715d

면을 제거 강력한 이름할 수 있습니다 당신이 무엇을 원하는 어셈블리입니다.을 즐길!

그것은 도움이 될 경우 제공할 수 있습니다 더 많은 특정 사용하여 케이스,거기에 아마 더 나은 방법으로 문제를 해결합니다.

습니다.NET3.5 가능 확장을 추가하는 방법 기존 프레임워크 클래스,아마도 그것은 충분한가요?

하나의 중요한 포인트:어셈블리 , 모든 변경 내용이 실패할 것이고 당신은 끝날 것이 dud.

.NET Framework 어셈블리에 서명되고 그냥 조엘 Coehoorn 말했다 얻을 것이 dud.

할 수 있습드를 사용하여 어셈블리 IronRuby 및 mixin 모든 기능을 할 수 있습의 꿈

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