2013-08-15 3 views
2

Я пытаюсь скомпилировать решение, но получаю сообщение об ошибке, когда пытаюсь сохранить.Компиляция с Roslyn

типа Anonymous <> __ blahblah не завершено

Однако в источнике скомпилированного нет никаких анонимных типов вообще.

код

private static void Compile(ISolution solution) 
    { 
     var workspaceServices = (IHaveWorkspaceServices)solution; 
     var projectDependencyService = workspaceServices.WorkspaceServices.GetService<IProjectDependencyService>(); 

     foreach (var projectId in projectDependencyService.GetDependencyGraph(solution).GetTopologicallySortedProjects()) 
     { 
      var currentDomain = AppDomain.CurrentDomain; 
      var assemblyName = new AssemblyName(); 
      assemblyName.Name = "Most." + solution.GetProject(projectId).AssemblyName; 

      var assemblyBuilder = currentDomain.DefineDynamicAssembly 
          (assemblyName, AssemblyBuilderAccess.RunAndSave); 

      var moduleBuilder = assemblyBuilder. 
              DefineDynamicModule(assemblyName.Name); 
      var types = moduleBuilder.GetTypes(); 
      types.Aggregate((ts, t) => 
      { 
       var tb = t as TypeBuilder; 
       return tb.CreateType(); 
      }); 
      solution.GetProject(projectId).GetCompilation().Emit(moduleBuilder); 
      assemblyBuilder.Save(assemblyName.Name); 
     } 
    } 
+0

В коде есть что-то действительно называемое 'blahblah'? Или вы изменили фактическое имя типа из сообщения компилятора? Было бы довольно весело, если бы остался тестовый код, который печатает «блаббаль» где-то в Рослине. –

+0

@MagnusGrindalBakken да, это было бы весело, но я это изменил. это было больше похоже на «<> _ AnnonymousType5'2' –

+0

Это звучит как ошибка в Roslyn для меня, вам, вероятно, следует сообщить об этом. – svick

ответ

1

Это ошибка в Рослин. Он воспроизводится в:

var assemblyName = new AssemblyName { Name = "Test" }; 

var compilation = Compilation.Create(
    assemblyName.Name, new CompilationOptions(OutputKind.DynamicallyLinkedLibrary), 
    new[] { 
     SyntaxTree.ParseText(@" 
using System; 
using System.Linq;  

public class C1 
{ 
    public void M1() 
    { 
     new[] {1}.Select(_ => new {}); 
    } 
}") 
    }, 
    new[] { 
     MetadataReference.CreateAssemblyReference("mscorlib"), 
     MetadataReference.CreateAssemblyReference("System.Core") 
    }); 

var assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(
    assemblyName, AssemblyBuilderAccess.RunAndSave); 
var moduleBuilder = assembly.DefineDynamicModule(assemblyName.Name, assemblyName.Name + ".dll"); 

var emitResult = compilation.Emit(moduleBuilder); 

if (emitResult.Success) 
{ 
    assembly.Save(assemblyName.Name + ".dll"); //Error! Type '<>f__AnonymousType0' was not completed. 
} 
else 
{ 
    throw new NotImplementedException(); 
} 
+0

в вашем коде есть анонимный тип, так что это может быть другая ошибка –

Смежные вопросы