C#では、関数のソースコードを文字列に変換する方法はありますか?JavaScriptでそれを行う方法のようなものです。これが必要なのは、Asp.Netコントロールのドキュメントを作成していて、コピー/貼り付けせずに、結果の横に元のソースコードを表示したいからです。
5 に答える
簡単な答え:いいえ。
長い答え:コンパイル時にMSBuildタスク、T4テンプレートを使用して何かを生成したり、手動で解析したり、Roslynを使用して解析したりできます。
ただし、実行時にソースコードが必要な場合は、コードを元に戻す安定した方法がないため、デプロイされたものにcsファイルを含める必要があります。(ただし、ランタイム逆コンパイルを試すことはできますが、それは「醜い」ように見え、あまり正確ではありません。)
不正行為の方法:
プロジェクトに.csファイルを含め、そこから読み取ります。
関数が実行時にタスクを実行して、テキストファイルにソースコードを書き込むようにしたいようです。関数は実行時にASSEMBLY(またはバイナリ)として実行されるため、これは不可能です。
ただし、関数にソースコードのコピーをどこかから読み取らせてから、別の場所に書き込むこともできます。
次のいずれかのツールを使用できます。
C#コンパイラを個別のプロセスとして実行し(.Net Frameworkの一部であり、無料で利用できます。同期を実行します)、生成されたアセンブリをロードするか、適切なメソッドを使用してILコードを発行します(「実際の」ILコードを生成する必要があります)。最初にそのような小さなテンプレートを準備します-c#クラスを記述し、生成されたILコードがどのように見えるかを調べます)。最初にそれを行うための適切な権限があるかどうかを確認してください。
Emitの使用例は、たとえばここにあります(私は少し前に書きました): http: //bitcare.codeplex.com/SourceControl/changeset/view/21192#366441