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