2017-04-17 5 views
0

私はVisual Studioのコード修正を開発中です。私はNAの "コードを修正するアナライザ"プロジェクトを持っており、自動的に生成されたポータブルプロジェクトを標準のC#ライブラリプロジェクトに変換しました。Visual Studio - Subscribe Light Bulb clickイベント

私の拡張では、コードを修正するとデータが収集されたファイルが生成されます。問題は、登録されたコード修正が実行されたときに電球修正提案を表示するとファイルが生成されることです。

// Register a code action that will invoke the fix. 
context.RegisterCodeFix(
    CodeAction.Create(
     title: Title, 
     createChangedDocument: c => MakeDataDrivenAsync(context.Document, methodDeclaration, c), 
     equivalenceKey: Title), 
     diagnostic); 

提案をクリックする(受諾する)場合にのみファイルを生成します。

これは可能ですか? 私は提案のクリックイベントを購読することを考えていましたが、私は方法がわからず、これが可能であることを示す情報が見つかりませんでした。

答えて

0

Roslyn APIは、プレビューが生成されるたびにコード修正を実行します。 System.IOを使用してファイルを生成している場合、Roslynができることはほとんどありませんが、Roslyn apisを使用して新しい文書を作成して追加すると、コード修正がIDEで実行されるまでファイルはディスクに保存されませんプレビューではなく)。タイプを移動するには、現在のプロジェクトで新しい文書を作成する必要があるMoveTypeEditorを参照してください。

+0

これは、生成しているドキュメントがコードの場合のみです。私は実際にコードを生成していません。 –

+0

ファイルシステム上でroslynが何も知らないファイルを作成しているコードを修正している場合は、roslynインフラストラクチャから完全に切り離された電球セッションを作成する拡張機能を作成し、拡張する必要があります。それを行う方法については、[this](https://github.com/Microsoft/VSSDK-Extensibility-Samples/tree/master/LightBulb)の例をご覧ください。 –

+2

または、おそらく 'AdditionalDocument'を作成することができます。 – SLaks

1

私はSLaksの提案に従った。それは正常に動作しています。 使用例:

SourceText st = SourceText.From(csv.GetStringDocument(), Encoding.UTF8); 
var additionalDoc = doc.Project.AddAdditionalDocument(filename, st, new List<string> { "_TestData" }); 
return additionalDoc.Project.Solution; 

source.roslyn.io

マイナス面(またはしない)は、ファイルが(私の場合は良いです)プロジェクトに追加されていることです。

+0

プロジェクトにファイルを追加する際に問題がなければ、これは良い解決策です。さもなければ、プレビューではないときにのみ実行されるコードをいくつか作成したいと思っていたのと同じような問題を抱えていました。私は 'CustomCodeAction'を思いつきました。[ここで私の質問を参照](https://stackoverflow.com/questions/44243781/roslyn-code-action-how-to-check-if-preview-or-real-execution /)。たぶんこれは、将来の読者があなたのソリューションが十分でない場所に役立ちます。 – Wolfsblvt

+1

私もその@ Wolfsblvtをやってしまった。それを書いてくれてありがとう。当初の質問に対する直接的な答えではなかったので、私は当初それを書いていませんでした。それは挑戦的にそれを解決する最善の方法です。 –

+0

ええ、私は良い情報も見つけられませんでした。なぜなら、私が解決策を発表すれば、それが涼しいと思ったからです。将来の人々がそれを見つけ出し、疎な情報源を何時間も検索する必要なくヘルプを得ることができます。 – Wolfsblvt