1

私のアナライザーは、メソッドを特定のシグネチャと照合します。アナライザー内から、分析しているクラスのインスタンスを作成し、アナライザーを起動させたメソッドを呼び出したいと思います。

ソースコードがコンパイル可能な状態にあると仮定して、それは可能ですか?

クラス名とメソッド名を取得するのはとても簡単ですが、Type.GetType(...) は常に null を返します。

これの目的は、テスト メソッドを使用しているときにアナライザーを起動して実行し、テストが失敗すると失敗するようにすることです。

コードをコンパイルする準備ができていない場合は、そのまま戻っても問題ありません。

4

2 に答える 2

0

実際にコンパイルされたとしても、ユーザーのコンパイルからコードを実行できない根本的な理由がもう 1 つあります。環境が間違っている可能性があります。Windows Phone、Xamarin Android/iOS、Linux 上の .NET Core などを対象とするシナリオを考えてみましょう。これらのいずれの場合でも、コンパイラにはコンパイル可能な参照アセンブリがありますが、別のプラットフォームをターゲットにているため、明らかにそのコードを実際に実行することはできません。ITypeSymbol をリフレクション System.Type に変換したり、その逆に変換したりできない理由をよく尋ねられますが、これが理由の 1 つです。実際には実行できない場合でも、コンパイラはプラットフォーム A でプラットフォーム B 用にコードをコンパイルできます (または完全にロードする) 最初に B のアセンブリをロードします。

于 2016-02-17T18:04:19.067 に答える