【发布时间】:2019-11-08 14:28:08
【问题描述】:
我正在尝试使用 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);
}
}
【问题讨论】:
-
我很好奇:是什么促使您删除顶部的
usings并在任何地方插入命名空间?是风格选择吗?我没有提供任何论据,只是好奇。 -
我们正在从资源迁移到 po 来翻译我们的应用程序。我们所有的资源都在“Project.Translations”文件夹中。大多数情况下,我们使用带有命名空间的完整路径来引用代码中的资源。但有时我们确实使用了 Project.Translations。因此,作为第一步,我只想用完整路径替换它们。