[英]Compiling with Roslyn
I'm trying to compile a solution but am getting an obscure error message when I try to save. 我正在尝试编译解决方案,但是在尝试保存时收到了模糊的错误消息。
Anonymous type <>__blahblah not completed 匿名类型<> __ blahblah未完成
However in the source compiled there's no anonymous types whatsoever. 但是在已编译的源代码中,没有任何匿名类型。
the code is 该代码是
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);
}
}
This is a bug in Roslyn. 这是罗斯林(Roslyn)中的错误。 It is reproduced in: 转载于:
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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.