私はこのようなライブラリをロードするのはまったく新しいですが、ここに私が立っています:
自家製のDLLファイルは、クラス自体とメソッドと同じくらい簡単です。このライブラリをロードするホームプログラムには、次のようなものがあります。
Assembly testDLL = Assembly.LoadFile("C:\\dll\\test.dll");
ここからは、ちょっと行き詰まっています。私の知る限り、名前を変更するとエラーが発生するため、正しくロードされます。
ここから何をしますか?その中にクラスとメソッドをどのように正確にロードしますか?
ありがとう。
すべての型のコレクションを取得するにはAssembly.GetTypes()
を使用し、特定の型を取得するにはAssembly.GetType(name)
を使用します。
次に、Activator.CreateInstance(type)
を使用してパラメーターなしのコンストラクターで型のインスタンスを作成するか、_Type.GetConstructors
_を使用してコンストラクターを取得し、それらを呼び出してインスタンスを作成できます。
同様に、Type.GetMethods()
などを使用してメソッドを取得できます。
基本的に、型を取得すると、実行できることがたくさんあります。詳細については、 member list を参照してください。特定のタスクを実行しようとしてスタックする場合(ジェネリックは扱いにくい場合があります)、特定の質問をするだけで、私たちがお手伝いできると確信しています。
これは、タイプがわかっている場合にクラスを取得する方法です。
Assembly assembly = Assembly.LoadFrom("C:\\dll\\test.dll");
// Load the object
string fullTypeName = "MyNamespace.YourType";
YourType myType = Assembly.CreateInstance(fullTypeName);
完全なタイプ名は重要です。 .dllを追加していないので、プロジェクトにないので使用できません。
あなたがすべてを望んでいるなら、私はジョン・スキートが答えるでしょう。
アセンブリを動的にロードし、その中のクラスからメソッドを呼び出す場合は、何らかの動的呼び出しを実行する必要があります。
基本的なアドバイスについては here を確認してください。
不足しているのは、型自体を取得する方法だけです。これは、次のようなコードで簡単に取得できます。
foreach (Type t in assemblyToScan.GetTypes())
{
if(condition)
//do stuff
}
また、アセンブリを静的に(コンパイル時にアセンブリを使用できるようにすることで)単に使用したい場合は、このページのLauncyからの答えが最適です。