3

現在のアプリケーションドメインでアセンブリフレンドリ名を取得したいので、次のように記述しました。

static void Main(string[] args)
    {
        foreach (System.Reflection.Assembly item in AppDomain.CurrentDomain.GetAssemblies())
        {
          Console.WriteLine(item.FullName);

        }
    }

しかし、問題は、これが私が見たかったものではなく、私が得たものの出力であるということです:

mscorlib、Version = 2.0.0.0、Culture = neutral、PublicKeyToken = b77a5c561934e0 ApplicationDomains、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null

実際、私はそれらの名前を期待していました:

代替テキストhttp://www.pixelshack.us/images/xjfkrjgwqiag9s6o76x6.png

私が間違えたことがあるかどうか誰かに教えてもらえますか?

前もって感謝します。

または、私が期待していた名前はアセンブリではありませんでしたか?

4

4 に答える 4

4

リフレクションを使用すると、常にきれいな名前空間名が得られるとは限りません。アセンブリの実際の名前が得られます。

また、参照されているすべてのライブラリを取得するのではなく、現在ロードされているライブラリのみを取得します。コードの上に「XmlDocumentfoo=new XmlDocument()」を追加すると、System.XMLが表示されます。

    static void Main(string[] args)
    {
        XmlDocument foo = new XmlDocument();

        foreach (System.Reflection.Assembly item in AppDomain.CurrentDomain.GetAssemblies())
        {
            Console.WriteLine(item.FullName);

        }
    }

出力:

mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
ConsoleApplication2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
于 2009-08-30T23:02:13.383 に答える
1

実行時に、参照されているすべてのアセンブリのリストを取得することはできません。Visual Studioプロジェクトで参照している場合でも、使用しない場合、C#コンパイラはそれらを無視するため、出力ファイル(exe / dll)にはまったく含まれません。

また、残りのアセンブリでは、実際に使用されるまでロードされません。

AppDomain.CurrentDomain.GetAssemblies()ロードされたすべてのアセンブリの配列が表示されます。このリストは、VisualStudioプロジェクトで表示されるものとは大きく異なる可能性があります。

于 2009-08-30T23:02:29.700 に答える
0
    foreach(var assem in AppDomain.CurrentDomain.GetAssemblies())
    {
        Console.WriteLine(assem.GetName().Name);

    }

Assembly.GetName()は、Nameプロパティを持つAssemblyNameオブジェクトを返します。それがあなたが探しているものです。

于 2009-08-30T23:01:33.103 に答える
0

Assemly.GetName()。Nameを使用するか、リフレクションを使用してAssemblyTitleAttributeを検索し、その値を使用します。

于 2010-11-24T20:39:39.460 に答える