2012-03-06 2 views
1

CIL을 사용하지 않고 API 접근 방식을 선호합니다. 사용할 수있는 상위 수준의 프레임 워크가 있습니까? 아니면 Reflection.Emit을 사용해야합니까? 탐험에서.net 바이트 코드를 생성하기 위해 어떤 옵션이 있습니까?

UPDATE

더 나는 모노 mcs.exe C# 컴파일러의 백 엔드에 사용되는지에 대한 설명을 충돌 (가능성)이 있습니다 것으로 나타났습니다. Some은 "Mono C# 컴파일러가 System.Reflection.Emit API"을 사용하여 ECMA CIL 이미지를 생성하는 반면 elsewhere은 2011 년 9 월에 mcs가 바이트 코드 생성을 위해 IKVM.NET implementation을 사용한다고 명시되어 있다고 말합니다.

+1

C#을 : 너무 막연한 –

+0

을 CIL을 생성하는 매우 "높은 수준의 프레임 워크"입니다. 어쩌면 http://cciast.codeplex.com/ –

+0

세부 정보 부족에 대한 사과 - 울퉁불퉁 한 버스 여행을 통해 휴대 전화에 신속하게 썼습니다. 필자는이 프레임 워크를 컴파일러의 코드 생성 백엔드로 사용해야 함을 나타내는 컴파일러 태그를 의미했습니다. –

답변

0

바이트 코드가 상위가 아닙니다. 높은 수준의 바이트 코드를 생성하고 적절한 언어로 작성하고 컴파일러를 사용하려면 ...

바이트 코드를 생성하려면 저수준 정의를 사용합니다.

달성하고자하는 목표는 무엇입니까? 아마 일리노이 방출보다 다른 기술을 사용하는 것이 가능할까요? IL을 사용하지 않고 .net에서 클래스 런타임을 조작하는 많은 방법이 있습니다.

+0

IL/byte-code를 내보내는 데 도움이되는 약간 더 높은 수준의 추상화가있는 도우미 API가 있습니다. 나는 수년 전에 코드 프로젝트에 언급 된 것을 기억하지만, 그 이름을 기억할 수는 없다. 몇 년 전에 버려졌습니다. –

2

달성하려는 목표에 따라 크게 다릅니다. 특정 시나리오를 모른 채 작업에 적합한 도구를 제안하는 것은 어렵습니다.

동적 메서드를 런타임에 생성해야하는 경우 Reflection.Emit이 적합합니다. 조립품을 수정하려는 경우 Mono.Cecil 이상을 확인하십시오. 이러한 모든 도구는 .NET 메타 데이터 및 MSIL을 이해해야합니다.

그러나 유형이나 메소드를 검사하거나 수정해야하는 작업을 수행하려는 경우 PostSharp과 같은 AOP 솔루션을 살펴볼 수 있습니다. MSIL보다 훨씬 높은 수준에서 이러한 요구 사항을 표현할 수 있습니다.

다시 말하지만,이 모든 사항은 사용 사례에 따라 다릅니다.

면책 조항 : 나는 SharpCrafters에서 일하고, PostSharp의 제작자

+0

컴파일러의 백엔드 코드 생성을 만드는 중입니다. 나는 당연히 텍스트 IL을 생성 할 수 있지만 IL을 변환하기위한 별도의 패스가 필요하기보다는 바이트 코드로 직접 스트리밍 할 수 있습니다. –

+0

그래서 postsharp 나 C# 기반 프레임 워크와 같은 일리노이 라이저는 특정 형식의 의미를 부과하는 프레임 워크가 내가 필요한 것에 적합하지 않을 수도 있습니다. –

관련 문제