0

ビジュアルスタジオの「もの」を作成する方法、またはツールを使用して各行を解析できるようにする方法を見つけようとしています。これにより、独自のアルゴリズムでチェックする他のコードの周りにカスタムコードを追加できます。

基本的に、ビジュアル スタジオ コード エディターから現在のファイルの readtext を取得し、それを変更したコードで新しいバージョンに置き換えたいと考えています。

resharper、マクロを見て、これを行う方法がわかりません。ファイルからすべてのコードをコピーし、それをWindowsアプリケーションフォームに貼り付けて、コピーして貼り付ける必要はありません。何か案は?

ありがとう

4

2 に答える 2

1

このタスクには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
于 2012-07-17T23:44:15.523 に答える
0

Visual Studio Automation 拡張ポイントを見ることができます

または、すべてのファイルを後処理することもできます..あなたが言及したコピー/貼り付けのソリューションを考えてみてください。ただし、コピー/貼り付けの代わりに、ディスクからファイルを読み取って書き戻します。これは、ファイルの変更またはユーザーの操作によってトリガーされる可能性があります。

于 2012-07-17T23:44:05.227 に答える