Я выяснил, как открыть решение, а затем выполнить итерацию через проекты, а затем документы. Я зациклился на том, как искать классы С#, Enums, Structs и Interfaces, которые могут иметь постороннюю точку с запятой в конце объявления (стиль С++). Я хотел бы удалить их и сохранить файлы .cs обратно на диск. В моей нынешней компании написано около 25 решений, с которыми я бы справился. Примечание. Причина, по которой мы это делаем, - продвижение вперед с лучшим набором стандартов кодирования. (И я хотел бы узнать, как использовать Roslyn для выполнения этих "простых" настроек)
Пример (ОБНОВЛЕНО):
class Program
{
static void Main(string[] args)
{
string solutionFile = @"S:\source\dotnet\SimpleApp\SimpleApp.sln";
IWorkspace workspace = Workspace.LoadSolution(solutionFile);
var proj = workspace.CurrentSolution.Projects.First();
var doc = proj.Documents.First();
var root = (CompilationUnitSyntax)doc.GetSyntaxRoot();
var classes = root.DescendantNodes().OfType<ClassDeclarationSyntax>();
foreach (var decl in classes)
{
ProcessClass(decl);
}
Console.ReadKey();
}
private static SyntaxNode ProcessClass(ClassDeclarationSyntax node)
{
ClassDeclarationSyntax newNode;
if (node.HasTrailingTrivia)
{
foreach (var t in node.GetTrailingTrivia())
{
var es = new SyntaxTrivia();
es.Kind = SyntaxKind.EmptyStatement;
// kind is readonly - what is the right way to create
// the right SyntaxTrivia?
if (t.Kind == SyntaxKind.EndOfLineTrivia)
{
node.ReplaceTrivia(t, es);
}
}
return // unsure how to do transform and return it
}
}
Пример кода, который я хочу преобразовать
using System;
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
};
// note: the semicolon at the end of the Person class