.NETでのmetadata
の意味とその意味を理解するために、いくつかのサイトをグーグル検索しました。
私はまだC#WPFデスクトップアプリケーションプログラミングに慣れていません。私がWebプログラミングをしていた頃、HTMLコードにはメタタグがあり、タイトル、キーワードなどでサイトを説明しています。 .NETアプリケーションでも同様ですか?ウィキを読んでグーグルで検索しましたが、概念的な説明しかありません。
_"metadata is data that describes the state of the Assembly and a detailed description of each type, attribute within the Assembly"
_について説明します。メタデータは単なる概念なのか、コードを記述するためにどこかに入力したコード行のような物理的なものですか?もしそうなら、私の称賛は私のメタデータになりますか?
メタデータは"Within the Common Language Runtime (CLR)"
ですが、C#のみでコーディングしています。CLRでメタデータにコーディングするにはどうすればよいですか?メタデータはCLRで称賛されますか?どうすれば変更できますか。
[〜#〜] msdn [〜#〜] は、メタデータがそれを理解するための別の言語のソフトウェアコンポーネントのバイナリ情報であることを書きました。私は人間だけが、コードのブロックが何をするのかを理解するために英語での記述(推奨)を必要とします。ソフトウェアコンポーネントは、私たちが書いた文を実行するだけです-「バイナリ」情報の必要性は何ですか。 「アセンブリの説明」を生成するための高レベルコードの意味をコンパイラがどのように理解できますか?通貨を変換するプログラムを作成すると、プログラムが通貨を変換していることを認識してメタデータが自動生成されますか?この知性はどこにありますか?
私は完全に混乱しています。
他の人がすでにすばらしい説明の答えを提供しているので、私はあなたがあなた自身でメタデータを見ることができる方法に言及するだけです。
Microsoft SDKディレクトリ(ほとんどの場合C:\ Program Files\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Toolsのバリエーション)にildasm.exe
というプログラムがあります-それは単純な逆アセンブラーですこれにより、コンパイル済みの.NETバイナリを表示できます。
非常に単純なコンソールアプリケーションを構築し、ildasm.exe
を使用してコンパイルされたコンテンツを表示できます。 View/MetaInfo/Show!コマンド(または単にCtrl + M)はメタデータを表示します-メタデータの表示を確認できます。アプリケーション印刷Hello
からコンソールへのメタデータの一部:
TypeDef #1 (02000002)
-------------------------------------------------------
TypDefName: Program (02000002)
Flags : [Public] [AutoLayout] [Class] [AnsiClass] [BeforeFieldInit](00100001)
Extends : 01000001 [TypeRef] System.Object
Method #1 (06000001) [ENTRYPOINT]
-------------------------------------------------------
MethodName: Main (06000001)
Flags : [Public] [Static] [HideBySig] [ReuseSlot] (00000096)
RVA : 0x00002050
ImplFlags : [IL] [Managed] (00000000)
CallCnvntn: [DEFAULT]
ReturnType: Void
1 Arguments
Argument #1: SZArray String
1 Parameters
(1) ParamToken : (08000001) Name : args flags: [none] (00000000)
ここでは、型定義(Program
)とそのメソッドの1つ(Main
)を見ることができます。これは、単一の入力引数を取り、voidを返します。これは当然、メタデータの一部にすぎません。最も単純なプログラムであっても、さらに多くの機能があります。
.NET Reflectionに精通している場合、メタデータは「Reflectionがアクセスするデータ」と考えることができます。各.NETアセンブリには、含まれる型やメソッド、それらのメソッドの属性などに関する情報が格納されます。コードを実行するためだけに格納する必要はありません(ネイティブEXEにはそのような情報はありません)宣言的なセキュリティの実施やReflectionの有効化など、他の目的で必要になります。
したがって、メタデータは「物理的なもの」ですが、その大部分は、作成したコードから自動的に生成されます。クラスまたはメソッドに属性を追加することが、おそらくメタデータを直接変更できる唯一の方法です。特に、ソースコードのコメントは、メタデータとして(またはその他の方法で)アセンブリに保存されません。
これに関するウィキペディアのページは非常に優れています: http://en.wikipedia.org/wiki/.NET_metadata
編集:いいえ、メタデータはコメントのようなものではありません。これは単に「コードに関するデータ」であり、コード自体の一部ではありません(プログラムの実行には不要です)。 HTMLメタデータとはまったく異なります。メタデータの例としては、アセンブリに「MyClass」という名前のクラスが含まれ、そのクラスに「DoSomething」という名前のメソッドと特定のパラメーターなどが含まれているという事実があります。
これは、ドットネットのメタデータに関する すばらしい包括的 の記事です。それを見てください。多くのことが明らかになることを願っています。 実行時にメタデータがどのように使用されるか を説明するページへのリンクがあります。
Reflection ドットネットは非常に強力な概念であり、実際のコードと一緒に保存されている メタデータの読み取り に基づいています。
簡単に言えば、メタデータとはプログラムについて保存された情報であり、多くの方法で調べることができます。
メタデータは、適用されたタイプ(クラス、インターフェースなど)、メソッドとパラメーター(名前とタイプ)、および属性を記述します。この情報は、さまざまな方法で使用できます。 nunitやmsstestなどのテストシステムは、メタデータを使用して、アセンブリ内のテストを「発見」します。メタデータを使用できる他の方法は、データバインディングです。
それを使用する方法は非常に多くあります-彼らはそれについての本さえ持っています(少なくともセクション http://my.safaribooksonline.com/book/programming/csharp/9781449379629/reflection-and-metadata/729 )
複雑にしないでください---データに関するデータ(情報)。
hTMLのMetaタグについて考えてください。ページ、キーワード、作成者、最終変更に関する情報を保持しています。 htmlページであるデータに関する情報を保持することを意味します。
C#の観点から言えば、メタデータは.NET Frameworkポータブル実行可能(PE)ファイルの1つのセクションに保存され、Microsoft中間言語(MSIL)はPEファイルの別のセクションに保存されます。ファイルのメタデータ部分には、一連のテーブルとヒープのデータ構造が含まれています。 MSIL部分には、PEファイルのメタデータ部分を参照するMSILおよびメタデータトークンが含まれます。各メタデータテーブルには、プログラムの要素に関する情報が含まれています。たとえば、あるメタデータテーブルはコード内のクラスを説明し、別のテーブルはフィールドなどを説明します。コードに10個のクラスがある場合、クラステーブルには、各クラスに1つずつ、合計10個の行があります。メタデータテーブルは、他のテーブルとヒープを参照します。たとえば、クラスのメタデータテーブルはメソッドのテーブルを参照します。また、メタデータは、情報を4つのヒープ構造(文字列、ブロブ、ユーザー文字列、およびGUID)に保存します。型およびメンバーに名前を付けるために使用されるすべての文字列は、文字列ヒープに格納されます。たとえば、メソッドテーブルは特定のメソッドの名前を直接格納するのではなく、文字列ヒープに格納されているメソッドの名前を指します。
これがあなたに興味を持っている場合refer -- https://msdn.Microsoft.com/en-us/library/xcd8txaw%28v=vs.110%29.aspx