Usando o método Roslyn Emit com um ModuleBuilder em vez de um MemoryStream

Eu estava tendo problemas com o desempenho ao usar o Roslyn para compilar em um assembly dinâmico. A compilação estava demorando ~ 3 segundos, em comparação com ~ 300 milissegundos para compilar o mesmo código ao usar oCodeDom compilador. Aqui está uma versão reduzida do código que estou usando para fazer a compilação:

var compilation = CSharpCompilation.Create(
                                      "UserPayRules.dll",
                                      syntaxTrees,
                                      assembliesToAdd);

using (var stream = new MemoryStream())
{
    stopWatch.Start();
    var result = compilation.Emit(stream);
    stopWatch.Stop();
    Debug.WriteLine("Compilation: {0}", stopWatch.ElapsedMilliseconds);
    if (!result.Success)
    {
        throw new InvalidOperationException();
    }
    var assembly = Assembly.Load(stream.GetBuffer());
}

Esta resposta sugere passar um objeto ModuleBuilder para o método Emit em vez de um MemoryStream para acelerar as coisas. Eu tentei seguir esse padrão, assim:

var compilation = CSharpCompilation.Create(
                                      "UserPayRules.dll",
                                      syntaxTrees,
                                      assembliesToAdd);

var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(
                                       new AssemblyName("ThisAssembly"),
                                       AssemblyBuilderAccess.RunAndCollect);

var moduleBuilder = assemblyBuilder.DefineDynamicModule("ThisModule");
var result = compilation.Emit(moduleBuilder);

Debug.WriteLine("Compilation: {0}", stopWatch.ElapsedMilliseconds);
if (!result.Success)
{
    throw new InvalidOperationException();
}
var assembly = Assembly.Load(stream.GetBuffer());

Mas minha versão de Roslyn aparentemente não tem uma sobrecarga doEmit método que leva umModuleBuilder. Essa versão é:

Eu iria: Microsoft.CodeAnalysis
Versão: 0.6.4033103-beta (Pré-lançamento)
Informações do Projeto: http://msdn.microsoft.com/pt-BR/roslyn

Obviamente, este é um pré-lançamento, portanto, não é estranho que a API tenha mudado. Contudo,

Minhas perguntas)Alguém sabe por que oEmit O método não parece mais ter uma sobrecarga que leva umModuleBuilder?Existe outra maneira de tornar essa compilação mais rápida enquanto ainda usa o Roslyn (o Roslyn oferece algumas vantagens sobre oCodeDom e compiladores Mono que eu preferiria não desistir)?

questionAnswers(1)

yourAnswerToTheQuestion