我举例说,让我说我有以下代码。
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);
如何使第二个代码使用第一个代码作为参考?还是用吗?
最简单的方法可能是在创建编译时传入多个syntaxTree
对象。
但是,如果你想逐步建立你的编译我相信你可以使用Compilation.AddSyntaxTrees
到你的第一个compilation
对象。