Я пытаюсь использовать 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);
}
}