Как манипулировать CSHTML с Roslyn - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь использовать Roslyn для некоторого массового рефакторинга моего кода.

Идея состоит в том, чтобы удалить определенное использование и вставить их непосредственно в код.

Например

using My.Awesome.Namespace;
...
var temp = MyType.Prop;

станет

var temp = My.Awesome.Namespace.MyType.Prop;

У меня уже есть рабочее решение для файлов .cs, использующее MSBuildWorkspace, чтобы проанализировать мое решение, найти ссылку на использование и заменить их в файле. Но я не могу найти, как сделать то же самое с файлами cshtml.

Они не отображаются в свойстве Documents моего проекта.

Есть идеи?

Вот код, который я использую для анализа решения

public void Process(string solutionPath, string projectName, string baseNamespace)
{
    //Force import csharp projects
    MSBuildLocator.RegisterDefaults();
    var _ = typeof(Microsoft.CodeAnalysis.CSharp.Formatting.CSharpFormattingOption
    using (var msWorkspace = MSBuildWorkspace.Create())
    {
        var solution = msWorkspace.OpenSolutionAsync(solutionPath).Result;

        var project = solution.Projects.FirstOrDefault(x => x.Name == projectName)
        if (project == null)
            throw new InvalidOperationException();

        foreach (var document in project.Documents)
        {
            if (document.SourceCodeKind != SourceCodeKind.Regular)
                continue;

            Console.WriteLine("Fixing file " + document.Name);

            // Remove using of baseNamespace from doc
            var newDoc = RemoveUsing(document, baseNamespace);
            solution = solution.WithDocumentSyntaxRoot(document.Id, newDoc);
        }
        msWorkspace.TryApplyChanges(solution);
    }

}

...