C# 如何使用Roslyn操作CSHTML

C# 如何使用Roslyn操作CSHTML,c#,.net,razor,roslyn,C#,.net,Razor,Roslyn,我正试图使用Roslyn对我的代码进行大规模重构 其思想是删除特定的using,并将其直接插入代码中 比如说 使用My.Awesome.Namespace; ... var temp=MyType.Prop; 将成为 var temp=My.Awesome.Namespace.MyType.Prop; 我已经有了一个使用MSBuildWorkspace的.cs文件的工作解决方案。要分析我的解决方案,请查找using引用并在文件中替换它们。但是我找不到如何在cshtml文件上执行同样的操作 它

我正试图使用Roslyn对我的代码进行大规模重构

其思想是删除特定的using,并将其直接插入代码中

比如说

使用My.Awesome.Namespace;
...
var temp=MyType.Prop;
将成为

var temp=My.Awesome.Namespace.MyType.Prop;
我已经有了一个使用
MSBuildWorkspace
的.cs文件的工作解决方案。要分析我的解决方案,请查找using引用并在文件中替换它们。但是我找不到如何在cshtml文件上执行同样的操作

它们不会出现在我的项目的
文档
属性中

有什么想法吗

下面是我用来解析解决方案的代码

public void进程(string solutionPath、string projectName、string baseNamespace)
{
//强制导入csharp项目
MSBuildLocator.RegisterDefaults();
var=typeof(Microsoft.CodeAnalysis.CSharp.Formatting.CSharpFormattingOption
使用(var msWorkspace=MSBuildWorkspace.Create())
{
var solution=msWorkspace.OpenSolutionAsync(solutionPath).Result;
var project=solution.Projects.FirstOrDefault(x=>x.Name==projectName)
如果(项目==null)
抛出新的InvalidOperationException();
foreach(project.Documents中的var文档)
{
if(document.SourceCodeKind!=SourceCodeKind.Regular)
继续;
Console.WriteLine(“固定文件”+文件名);
//从文档中删除baseNamespace的使用
var newDoc=RemoveUsing(文档,baseNamespace);
solution=solution.WithDocumentSyntaxRoot(document.Id,newDoc);
}
msWorkspace.TryApplyChanges(解决方案);
}
}

这是一个扫描、解析、编译和获取解决方案的.cshtml文件语义模型的体面解决方案:

这是一个扫描、解析、编译和获取解决方案的.cshtml文件语义模型的体面解决方案:

我只是好奇:是什么促使您使用顶部的
删除
然后到处插入名称空间?这是一种风格选择吗?我没有提供任何论据,只是好奇。我们正在从资源迁移到po来翻译我们的应用程序。我们所有的资源都在“Project.Translations”中文件夹。大多数情况下,我们使用名称空间的完整路径来引用代码中的资源。但有时我们使用Project.Translations。因此,作为第一步,我只想用完整路径替换它们。我只是好奇:是什么促使您删除顶部的
usings
,并插入名称空间到处都是?这是一种风格选择吗?我没有提供任何论据,只是好奇。我们正在从资源迁移到po来翻译我们的应用程序。我们所有的资源都在“Project.Translations”中文件夹。大多数情况下,我们使用名称空间的完整路径来引用代码中的资源。但有时我们确实使用Project.Translations。因此,作为第一步,我只想将它们全部替换为完整路径。