2011-06-28 16 views
1

私はコードジェネレータを書いて、これらのコードをmvpパターンで保存したいのですが、解決策としてReflection.Emitを使うことができますか、CodeDomは良いですか?Reflection.Emitを使用してコードを生成し、生成されたコードを.csファイルに保存できますか、CodeDomを使用できますか?

EDIT --------------

私が最初に私は、実行時にこのコードをコンパイルして実行し、第二に、ソースコードを生成したい、2の作業を行う必要がありますオプション。

+2

私はdownvoteしませんでした。これは多くの人が持っている質問です。たぶん、生成しようとしているコードの種類(ソース、期待される出力)についてもっと詳しく理解しておくべきでしょう。また、T4テンプレートエンジンを見てください.hms://msdn.microsoft.com/en-us/library/bb126445.aspx –

+0

ダウンボングの理由は何ですか? –

+0

私は2つの作業を行う必要があります。まず、実行時にこのコードをコンパイルして実行し、次にオプションとしてソースコードを生成します。 –

答えて

2

あなたは二つの異なる概念をミックスし、よりよいフィットというオプション(複数可)を使用することはできません両方の名前空間(System.CodeDomSystem.Reflection.Emit)であなたの質問のいくつかの側面を達成することができますが、あなたがしたいことは何でも。

あなたはもしかしたらあなたはSystem.CodeDomに使用を行いたいC#の\のVBコードを生成し、コンパイルしたい場合:

この名前空間は にソースコード の構造をモデル化するために使用することができます ソースコードとして System.CodeDom.Compiler名前空間によって提供される 機能を使用して、サポートされる言語でコードとして出力することができます。

チェックのCodeDOMを通じてメソッドを定義する方法のこの小さな例:生成し、MSILを操作するために使用されるそのSystem.Reflection.Emitについては

// Defines a method that returns a string passed to it. 
CodeMemberMethod method1 = new CodeMemberMethod();    
method1.Name = "ReturnString"; 
method1.ReturnType = new CodeTypeReference("System.String"); 
method1.Parameters.Add(new CodeParameterDeclarationExpression("System.String", "text")); 
method1.Statements.Add(new CodeMethodReturnStatement(new CodeArgumentReferenceExpression("text")));    

// A C# code generator produces the following source code for the preceeding example code: 

// private string ReturnString(string text) 
// { 
//  return text; 
// } 

(マイクロソフト中級言語)は、Common Language Infrastructure仕様で定義され、.NET Frameworkで使用される最低レベルの人間が読めるプログラミング言語です。 MSILは今CIL(共通中間言語)として知られていることに注意してください:

System.Reflection.Emit名前空間 は、コンパイラ またはツールは、メタデータとマイクロソフト 中間言語(MSIL)を放出するためのクラスが含まれていると 必要に応じてディスク上にPEファイルを生成します。 これらのクラスのプライマリクライアント は、スクリプトエンジンとコンパイラです。

このアプローチを使用すると、アセンブリコードに精通していても、むしろ難しく複雑な作業であるCILバイトコードの手順を学ぶことができます。実装する。最初の印象については、CILCIL instructions listに関するウィキペディアの記事をチェックしてください。

1

C#のソースコードを表示するオプションが必要な場合は、CodeDomを使用します。 Reflection.EmitはILをレンダリングしますが、それを使用可能なC#コードにするのは簡単ではありません。

関連する問題