我正在尝试使用Roslyn对我的代码进行一些大规模重构。
想法是删除特定的用法,并将其直接插入代码中。
例如
using My.Awesome.Namespace;
...
var temp = MyType.Prop;
将成为
var temp = My.Awesome.Namespace.MyType.Prop;
我已经有了使用MSBuildWorkspace
来解析.cs文件的有效解决方案,以解析我的解决方案,找到正在使用的引用并将其替换在文件中。但是我找不到如何在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);
}
}
答案 0 :(得分:0)
这是一个不错的解决方案,用于扫描,解析,编译和获取解决方案的.cshtml文件的语义模型:Getting a SemanticModel of a cshtml file?