C#Roslyn在下一次编译中使用以前编译的类

问题描述 投票:0回答:1

我举例说,让我说我有以下代码。

fullcommand = @"public class oldTest
{
    public static void oldTestMethod(){
        Console.WriteLine(""oldTest Class"");
    }
}"

var syntaxTree = CSharpSyntaxTree.ParseText(fullCommand);
var compilation = CSharpCompilation.Create(
                assemblyName,
                new[] {syntaxTree},
                references,
                options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary,allowUnsafe:true));

var ms = new MemoryStream();
var result = compilation.Emit(ms);

我将在内存中使用Roslyn编译上面的代码。接下来我想在内存中编译另一个代码以使用上面编译的类,让我们在下面说。

new_fullcommand = @"public class newTest
    {
        public static void newTest(){
            oldTest.oldTestMethod();
        }
    }"

    var syntaxTree = CSharpSyntaxTree.ParseText(new_fullcommand);
    var compilation = CSharpCompilation.Create(
                    assemblyName,
                    new[] {syntaxTree},
                    references,
                    options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary,allowUnsafe:true));

    var ms = new MemoryStream();
    var result = compilation.Emit(ms);

如何使第二个代码使用第一个代码作为参考?还是用吗?

c# roslyn in-memory runtime-compilation
1个回答
0
投票

最简单的方法可能是在创建编译时传入多个syntaxTree对象。

但是,如果你想逐步建立你的编译我相信你可以使用Compilation.AddSyntaxTrees到你的第一个compilation对象。

© www.soinside.com 2019 - 2024. All rights reserved.