2016-10-11 5 views
0

런타임시 C# .NET 4.6에서도 런타임에 컴파일되는 객체에서 참조하는 런타임에 코드를 컴파일하려고합니다.다른 런타임 컴파일 어셈블리에서 참조 런타임 런타임 어셈블리 컴파일

저는 CSharpCodeProvider를 사용하여 메모리에 CompilerResult를 생성하고 있습니다. 결과 어셈블리는 컴파일 된 두 번째 코드 조각에서 참조됩니다. 두 번째 부분을 컴파일하기 전에 AssemblyReference를 CompilerParameters에 추가 할 수 있습니까? 그렇지 않으면 누락 된 어셈블리 컴파일러 오류가 발생합니다.

  • 가의 1 조각을 생성하지 않습니다

    1. 이 디스크의 첫번째 어셈블리를 생성하고 CompilerParameters.ReferencedAssemblies.Add를 사용 (하지만 불필요한 디스크 작업을 좋아하지 않는다) :

      현재 나는 두 가지 옵션 참조 모든하지만 2 조각에 코드를 붙여 넣습니다 (하지만 동일한 코드를 여러 번 붙여 좋아하지 않는다)

  • 그래서 내 질문 : 어셈블리를 생성 런타임을 참조 할 수있는 메모리 방법이 생성 된 다른 런타임에서 어셈블리? 어쨌든 디스크에

    +0

    아마도 관련이 있습니다 : http://stackoverflow.com/questions/2830160/c-sharp-referencing-a-type-in-a-dynamically-generated-assembly – YSharp

    답변

    1

    CSharpCodeProvider 작품 - 당신은 단지 "메모리"어셈블리를 생성하더라도, 그것은 디스크 및 메모리에로드합니다에 어셈블리를 컴파일 (그것은 가지에있다 - 그것은 않는 모든 통화 csc.exe한다). 유일한 차이점은 어셈블리 파일은 지정한 파일이 아닌 임시 DLL입니다.

    C# 코드의 진정한 메모리 내 컴파일을 원하면 Roslyn 컴파일러를 사용하십시오.

    +0

    대답으로 받아 들여지고, 디스크에 DLL 생성에 관한 좋은 힌트가 있습니다. 그것은 많이 설명합니다. Roslyn 컴파일러에 대한 좋은 힌트. – anhoppe