С# Roslyn для использования ранее скомпилированного класса в следующих компиляциях

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

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

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


person Emily Wong    schedule 15.03.2019    source источник


Ответы (1)


Вероятно, самым простым способом было бы передать несколько объектов syntaxTree при создании компиляции.

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

person JoshVarty    schedule 18.03.2019
comment
Я не могу этого сделать, мне нужно скомпилировать SyntaxTrees отдельно, потому что я не знаю о будущих кодах. - person Emily Wong; 18.03.2019
comment
Я нашел это довольно актуальным, но я не могу заставить его работать. stackoverflow.com/questions/38646619/ Есть идеи, как это исправить? - person Emily Wong; 18.03.2019