実行時にアセンブリをロードしようとしていますが、スタティックを使用してアセンブリ内にタイプのインスタンスを作成できない理由がわかりませんActivator.CreateInstance()
。それはAssembly.CreateInstance()
で動作します。実行時にアセンブリをロードし、Activator.CreateInstance()を使用してインスタンスを作成する
string assemblyFilename = "MyAssembly.dll";
string assemblyName = "MyAssembly";
string typeName = "MyAssembly.MyType";
FileInfo fileInfo = new FileInfo(assemblyFilename);
これは動作します:
var assembly = Assembly.LoadFrom(assemblyFilename);
Form form = (Form)assembly.CreateInstance(typeName);
しかし、これは動作しません:
Assembly.LoadFrom(assemblyFilename);
Form form = (Form)Activator.CreateInstance(assemblyName, typeName).Unwrap();
スローにFileNotFoundException:
は、ファイルまたはアセンブリをロードできませんでした 'MyAssembly' または1をその のdependenc ies。システムは、指定されたファイルを見つけることができません。
EDIT:どちらの場合も
私はAppDomain.CurrentDomain.GetAssemblies()
で見たとき、Assembly.LoadFrom()
コールの後、私は私のアセンブリがロードされていることがわかります。
AppDomain.CurrentDomain.Load(File.ReadAllBytes(assemblyFileName));
EDIT:
2番目のバージョンでは、表示名だけでなく、完全なアセンブリ名を指定し、フードの下にAssembly.Load()を使用する必要があります。 LoadFrom()と同じではありません。 fuslogvw.exeのトラブルシューティング –
「MyAssembly、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = 5dc3e20777fed081」のように? – davenewza
私はGetAssemblies()の "MyAssembly"からFullNameをまっすぐコピーしたし、まだ動作しません。混乱している! – davenewza