7

アセンブリ「 Foo.Bar」に存在するタイプ「Wibble.Wobble」があるとします。

そして、そのアセンブリはメイン アプリケーションのロード コンテキストにロードされません。

次の文字列を後続の部分に解析するための既存の公開メカニズムはありますか:

"Wibble.Wobble, Foo.Bar, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xyz"

質問する理由は、実行時にさまざまなタイプをロードする必要があり、そのうちのいくつかは現在のロード コンテキストにある可能性があるためです。その他は、外部アセンブリからロードする必要がある場合があります。

現在の読み込みコンテキストから型を読み込むType.GetType("typename")方法を知っています。アセンブリを読み込んでそこから型を取得する方法も知っていAssembly.LoadFile("xyz").GetType("abc")ます。私が問題を抱えているのは、アセンブリから型をロードしようとする場合Type.GetType.

ソリューション自体はそれほど複雑ではありません。最初のコンマの前で文字列を分割するだけです。ただし、オブジェクト表現として完全修飾名を取得する方法があるかどうかを知りたかったので、これを行う必要はなく、ディレクトリ全体をループすることなく適切なアセンブリを見つけるのに役立ちます。

4

1 に答える 1

1

いろいろ調べた結果、フレームワークでこれを行うことができるものは公開されていないと思います。私は、私よりもフレームワークをよく理解している人によって、よりよくテストされ、書かれている (またはすべきである) コア機能を使用することを好むので、誰かが私に違うことを見せてくれることを望んでいます.

そのため、私は自分の強く型付けされたTypeNameオブジェクトをロールしました。

class TypeName
{
    public TypeName(string name)
    {
        var index = name.LastIndexOf(',');
        if (index > 0)
        {
            Name = name.Substring(0, index).Trim();

            AssemblyName = new AssemblyName(name.Substring(index + 1).Trim());
        }
        else
        {
            Name = name;    
        }
    }

    public string Name { get; private set; }

    public AssemblyName AssemblyName { get; private set; }
}

オブジェクトは、string型名または完全修飾型名のいずれかである を受け取ります。完全修飾型名の場合、AssemblyName 属性は AssemblyName クラスを使用して設定されます。それ以外の場合は null のままになります。

于 2012-10-17T14:55:36.717 に答える