2011-07-25 8 views
1

C#で現在実行中のアセンブリから埋め込みリソースを抽出しようとしています。Assembly.GetExecutingAssembly()を使用して完全修飾アセンブリ名を取得できません。GetName()

私の完全修飾アセンブリ名がAlpha.Beta.Gamma.Delta.MyTaskLibraryは(明らかに、これは実際に名ではありません形式である;しかし、部品の数は正確に私が持っている名前に対応したプロジェクトのデフォルトの名前空間がありますAlpha.Beta.Gamma.Delta.MyTaskLibrary

私が代わりに私に上記の名前を示すの、System.Reflection.Assembly.GetExecutingAssembly().GetName().Nameを実行し、それがGamma.Delta.MyTaskLibrary私に示している。一方

、私はtypeof(ClassName).AssemblyQualifiedName行うとき、私はトン取得します彼はバージョン、カルチャー、公開鍵トークンと共に上記の完全修飾名を使用します。

なぜこの動作の違いがありますか?

EDIT:私の究極の目標は、それは正確に私が取得しようとしているこのassemblyName

Assembly.GetExecutingAssembly().GetManifestResourceStream(assemblyName + "." + fileName) 

を使用して、このアセンブリ内から埋め込まれたリソースを取得することです。私は"Alpha.Beta.Gamma.Delta.MyTaskLibrary.ResourceFile.ext""Gamma.Delta.MyTaskLibrary.ResourceFile.ext"の両方でこのメソッド呼び出しを試み、前者のみが機能しました。

答えて

2

System.Reflection.Assembly.GetExecutingAssembly().GetName().Nameアセンブリの名前が表示されます。通常、アセンブリが配置されているファイルの名前です。

つまり、Abcde.dllという名前のアセンブリを持ち、名前空間My.Namespace.Name.Inside.Of.Abcde.Assemblyを持つことができます。彼らは関連していません。プロジェクトのデフォルトネームスペースは... hm、デフォルトです。結果として得られるアセンブリにはコンパイルされません。これは、Visual Studioのヒントですが、この具体的なプロジェクトに新しい項目を追加する場合は、クラス/インターフェイス/何を配置する必要があります。

あなたのリクエストには言及されていないクラスの名前をどうやって取得しますか?

0

アセンブリでGetModules()を呼び出して、モジュールのコレクションを繰り返し処理し、各モジュールのFullyQualifiedNameプロパティにアクセスします。

関連する問題