Roslyn MsBuildWorkspace Emit не содержит мои изменения

Я пытаюсь внести незначительные изменения в документы с Roslyn, а затем скомпилировать проект в новую DLL. Но когда я компилирую его в новый dll, все мои изменения исчезли. Я что-то здесь упускаю?

var workspace = MSBuildWorkspace.Create();
var project = workspace.OpenProjectAsync(@"path\to\.csproj").Result;

var documents = project.DocumentIds;
foreach (var documentId in documents)
{
    var document = project.GetDocument(documentId);
    var root = document.GetSyntaxRootAsync().Result

    var rewrite = new MyRewrite();
    root = rewrite.Visit(root);

    var newDocument = document.WithSyntaxRoot(root);
    var compilation = newDocument.Project.GetCompilationAsync().Result;

    // When I look at the sementatic model here it contains my changes.
    var sementaticModel = 
    compilation.GetSemanticModel(newDocument.GetSyntaxTreeAsync().Result); 

    // But when I inspect this dll with dotPeek it's still the old code without changes.
    compilation.Emit("new/dll/path");   
}

1 ответ

Решение

Каким-то образом это сработало, изменив:

var newDocument = document.WithSyntaxRoot(root);

в

var newDocument = document.WithText(root.GetText());
Другие вопросы по тегам