C# 用Roslyn建立了一个班级。。。现在我该如何编译它呢?

C# 用Roslyn建立了一个班级。。。现在我该如何编译它呢?,c#,asp.net-core,code-generation,roslyn,C#,Asp.net Core,Code Generation,Roslyn,我正在尝试将一些旧的.net代码转换为.net核心。我不太熟悉我要转换的内容,但这是一些使用CodeDom的简单代码生成。据我所知,这意味着我需要在.NETCore中使用Roslyn 这是我在旧代码中的内容: var thing = new CodeTypeDeclaration("test"); wrapper.IsClass = true; wrapper.TypeAttributes = TypeAttributes.Public; AddPropertyHelper(thing, ty

我正在尝试将一些旧的.net代码转换为.net核心。我不太熟悉我要转换的内容,但这是一些使用CodeDom的简单代码生成。据我所知,这意味着我需要在.NETCore中使用Roslyn

这是我在旧代码中的内容:

var thing = new CodeTypeDeclaration("test");
wrapper.IsClass = true;
wrapper.TypeAttributes = TypeAttributes.Public;

AddPropertyHelper(thing, typeof(string), "some_prop");
...
...
...
var compiler = CodeDomProvider.CreateProvider("CSharp");
var options = new CompilerParameters();
options.GenerateExecutable = false;
options.GenerateInMemory = true;
options.OutputAssembly = Path.GetTempFileName();
var results = provider.CompileAssemblyFromDom(options);
return results.CompiledAssembly.GetType(GeneratedNamespace + "." + "test");
这就是我到目前为止在罗斯林的经历:

var @namespace = SyntaxFactory.NamespaceDeclaration(SyntaxFactory.ParseName(GeneratedNamespace));
var classDeclaration = SyntaxFactory.ClassDeclaration("test");
classDeclaration.AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword));
AddPropertyToWrapped(classDeclaration, typeof(string), "some_prop");
编辑:这是我添加的内容 --

--

不过,我看不到任何关于编译它的内容。我在网上找不到任何有用的例子或文档,这些例子或文档都过于复杂。有什么简单的东西我遗漏了吗?

您正在寻找,它需要语法树和引用


然后,您可以调用它的各种Emit方法来编译成流。

您知道任何示例吗?我试着找到了一些,但没有一个能像我一样完成同样的任务。我添加了一个编译单元,但我不确定我需要用Emit做什么。你需要的是CSharpCompilation,而不是CompilationUnitSyntax。调用其Create将为您提供一个对象,该对象具有一系列Emit重载,其中一些是扩展方法。这将提供一个带有程序集的流。对不起,昨天我做这个时忘了我在哪里。我在OP中添加了一些东西,现在Emit的结果没有失败。我有这条小溪,但我不知道该怎么处理它。。。我见过一些老例子,其中人们使用var ourAssembly=Assembly.Loadms.ToArray;,但这已经不起作用了;Load需要的是AssemblyName,而不是字节流。
var cu = SyntaxFactory.CompilationUnit();
cu.AddMembers(@namespace);
var compilation = CSharpCompilation.Create(
            "foo",
            syntaxTrees: new[] { cu.SyntaxTree },
            options: options,
            references: new[] {
                MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location),
                MetadataReference.CreateFromFile(typeof(Uri).GetTypeInfo().Assembly.Location),
                MetadataReference.CreateFromFile(coreDir.FullName + Path.DirectorySeparatorChar + "mscorlib.dll"),
                MetadataReference.CreateFromFile(coreDir.FullName + Path.DirectorySeparatorChar + "System.Runtime.dll")
            });
var ms = new MemoryStream();
var emitResult = compilation.Emit(ms);