1

参照されていないアセンブリから型を取得したい。私はこの答えを使って問題を解決しました。

ObjectListここでの問題は、別のアセンブリから別のタイプを含むタイプをロードしていることです。私はこのようにします:

Assembly assembly = Assembly.LoadFrom ("@c:\myAssemblies\myAssembly.Data.DomainObjects.dll");
Type myType = assembly.GetType ("myAssembly.Data.DomainObjects.ObjectList`1[[myAssembly.otherNamespace.myClass, myAssembly.otherNamespace, Version=1.13.73.1082, Culture=neutral, PublicKeyToken=fee00910d6e5f53b]]");

を含むアセンブリotherNamespaceも参照されないため、GetTypeメソッドはを返しますnull。今の私の質問は:

別のタイプの参照されていないアセンブリを含むオブジェクトリストのタイプを取得することは可能ですか?または:タイプのアセンブリを自分の中にロードするにはどうすればよいObjectListですか?

4

3 に答える 3

0

わかりました、これは私がテストするのは少し難しいです-しかし、私の答えが変換されることを願っています:

基本的に、2つのステップでそれを行う必要があります-

  1. ジェネリックパラメータータイプ(この場合はmyAssembly.otherNamespace.myClass)を解決します
  2. ジェネリックパラメーターのタイプに基づいて、新しいタイプを生成します。

Linqpadスクリプトは次のとおりです。

void Main()
{
    //resolve the inner type
    var  parameterType = Type.GetType("UserQuery+GenericParameter");

    //Use the generic type, and generate with the inner parameter type
    var genericTypeWithParameter = Type.GetType("UserQuery+Moop`1")
        .MakeGenericType(parameterType);

    //The resolved type - printed to console
    genericTypeWithParameter.Dump();
}

public class Moop <T> { }
public class GenericParameter { }
于 2012-05-23T12:06:56.157 に答える
0

アセンブリmyAssembly.otherNamespace.dllが実行可能ファイルと同じディレクトリにないか、GAC にインストールされていない場合、共通言語ランタイムはそれを見つけることができません。したがって、myAssembly.otherNamespace.dllは AppDomain に読み込まれず、必要な型を取得できません。

myAssembly.Data.DomainObjects.dllmyAssembly.otherNamespace.dllの両方を実行可能ファイルと同じディレクトリに置くか、GAC にインストールします。次に、 ( LoadFromの代わりに) Loadを使用して、それらを同じLoad Cntextにロードするようにします。

アセンブリmyAssembly.Data.DomainObjects.dllのメタデータにアセンブリmyAssembly.otherNamespace.dllへの参照が含まれている場合、後者は前者をロードするときに自動的にロードされます。それ以外の場合は、必要な型を取得する前に両方のアセンブリを読み込む必要があります。

于 2012-05-23T13:26:25.533 に答える
0

これについて100%確信があるわけではありませんが、これを試してみると:

public class Moop<T> {}

そして私は:

Type.GetType("UserQuery.Moop`1") //returns null

Type.GetType("UserQuery+Moop`1") //returns the correct type

リンクパッドで

編集:「+」は、ネストされた型であることを意味します-したがって、これはおそらく正しい答えではありません。

于 2012-05-23T11:52:16.450 に答える