Chargement des assemblages lors de l'exécution et de la création d'instances à l'aide de l'Activateur.CreateInstance()

Je suis en train de charger un assembly à l'exécution, et je ne suis pas sûr pourquoi je ne peux pas créer une instance d'un type à l'assemblée à l'aide de la statique Activator.CreateInstance(). Il fonctionne avec Assembly.CreateInstance().

string assemblyFilename = "MyAssembly.dll";
string assemblyName = "MyAssembly";
string typeName = "MyAssembly.MyType";

FileInfo fileInfo = new FileInfo(assemblyFilename);

Cela fonctionne:

var assembly = Assembly.LoadFrom(assemblyFilename);
Form form = (Form)assembly.CreateInstance(typeName);

Mais cela ne fonctionne PAS:

Assembly.LoadFrom(assemblyFilename);
Form form = (Form)Activator.CreateInstance(assemblyName, typeName).Unwrap();

FileNotFoundException jeté:

Impossible de charger le fichier ou l'assembly 'MyAssembly' ou une de ses
les dépendances. Le système ne peut pas trouver le fichier spécifié.

EDIT:

Dans les deux cas, après la Assembly.LoadFrom() appel, je peux voir que mon montage a été chargé quand je me regarde dans AppDomain.CurrentDomain.GetAssemblies().

La 2ème version qui devrait spécifier un assemblage complet de nom, pas seulement le nom d'affichage, et les utilisations de l'Assemblée.Load() sous le capot. Pas la même chose que LoadFrom(). La résolution de problèmes avec fuslogvw.exe
Comme dans "MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5dc3e20777fed081"? Je reçois la même erreur
J'ai même copié le FullName directement à partir de "MyAssembly" dans GetAssemblies() et ça ne fonctionne toujours pas. Tellement confus!
Une chose de plus, essayez de brancher dans l'événement AssemblyResolve de domaine d'application.Actuel. Il doit se déclencher lorsque l'assemblée n'est pas trouvé, peut-être vous pouvez voir l'intégralité de l'assemblée de nom, il est à la recherche pour. Peut-être qu'il ne peut pas trouver une dépendance que votre MyAssembly utilise.
Une autre chose Dave, essayez d'utiliser de l'assemblée pour le nom qualifié du nom de type, c'est à dire: TopNamespace.SubNameSpace.ContainingClass+NestedClass, MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089

OriginalL'auteur davenewza | 2012-09-07