C # Roslyn для использования ранее скомпилированного класса в следующих компиляциях - PullRequest
0 голосов
/ 15 марта 2019

Я спрашиваю с примером, допустим, у меня есть следующий код.

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

как я могу заставить второй код использовать первый код в качестве ссылки?или использовать это?

1 Ответ

0 голосов
/ 18 марта 2019

Самый простой способ - это передать несколько syntaxTree объектов при создании компиляции.

Однако, если вы хотите создавать компиляцию постепенно, я считаю, что вы можете использовать Compilation.AddSyntaxTrees для вашего первого compilation объекта.

...