0

我举个例子,假设我有以下代码。

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);

我怎样才能使第二个代码使用第一个代码作为参考?或使用它?

4

1 回答 1

0

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

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

于 2019-03-18T01:36:14.863 回答