このタスクにはRoslynを使用することをお勧めします。ソリューション、プロジェクトを読み取り、内部のソース ファイルを構成要素の構文またはセマンティック ツリーとして実現する機能を提供します。Eric Lippert は、彼のブログで CTP を取り上げました (強調は私のものです)。
Roslyn は、コンパイラ、開発環境、リファクタリング エンジンなどの構築に役立つコード分析 API のライブラリです。C# と Visual Basic の字句解析、文法解析、意味解析をサポートしています。そして、それは素晴らしいです。
Roslyn を使用して、独自のリファクタリング ツールを作成するなど、IDE 拡張機能を作成することもできます。
Visual Studio IDE を拡張するために、Editor Services API は一連の拡張ポイントを既存の言語サービス機能に公開します。これらのいくつかの例には、補完リスト、コード アウトライナー、ハイライト参照、構文分類子、およびコード リファクタリングが含まれます。これらの拡張機能ごとに、独自の MEF プロバイダーを作成し、プロバイダーに関する重要な詳細を記述する Export* 属性が少なくとも 1 つあることを確認する必要があります。
別の質問では、このメイン ループを使用して、最小限のコードで型名を(たとえばint
で) 置換する方法を示しました。Int32
var workspace = Workspace.LoadSolution(path);
var solution = workspace.CurrentSolution;
foreach (var project in solution.Projects
.Where(prj => prj.LanguageServices.Language == "C#"))
{
foreach (var doc in project.Documents
.Where(d => d.SourceCodeKind == SourceCodeKind.Regular
&& d.LanguageServices.Language == "C#"))
{
var tree = SyntaxTree.ParseCompilationUnit(
doc.GetText(),
doc.DisplayName);
// Update the syntax tree
var newTree = UpdatePredefinedTypes(tree);
solution = solution.UpdateDocument(doc.Id, newTree.Text);
}
}
workspace.ApplyChanges(workspace.CurrentSolution, solution);
// When you run this on a project open in VS it notices the changes