2013-05-18 1 views
1

J'ai une chaîne contenant un nom qualifié complet tel que MyNamespace.MyType que je connais dans un assembly chargé.Obtenir le type à partir du nom qualifié complet uniquement dans l'application Windows Store

Je dois obtenir l'instance Type de cela, dans une application Windows Store. Le problème que j'ai est que, bien qu'il y ait quelques classes de réflexion dans les applications de Windows Store, c'est très limité, et je ne peux tout simplement pas utiliser ce que j'ai utilisé pour une application de bureau.

Si je peux obtenir un assemblage, je peux trouver mon type à l'intérieur, donc j'essaye actuellement d'obtenir tous les assemblys chargés, ce que je ne peux pas faire facilement car AppDomain n'existe pas.

J'ai trouvé ce qui suit:

private async System.Threading.Tasks.Task<IEnumerable<Assembly>> GetAssembliesCore() 
{ 
    var folder = Windows.ApplicationModel.Package.Current.InstalledLocation; 

    List<Assembly> assemblies = new List<Assembly>(); 
    foreach (Windows.Storage.StorageFile file in 
       await folder.GetFilesAsync().AsTask().ConfigureAwait(false)) 
    { 
     if (file.FileType == ".dll") 
     { 
      AssemblyName name = new AssemblyName() { Name = file.Name }; 
      Assembly asm = Assembly.Load(name); 
      assemblies.Add(asm); 
     } 
    } 

    return assemblies; 
} 

J'ai ajouté le .AsTask().ConfigureAwait(false) pour l'arrêter suspendu, mais il ne parvient maintenant à essayer de charger l'assemblage:

« Impossible de charger le fichier ou l'assembly « FDE .Audio.dll » ou une de ses dépendances
le système ne peut pas trouver le fichier spécifié.. « : » FDE.Audio.dll »

Y a-t-il quelque chose que je dois mettre en place dans le manifeste? Autre chose?

Comment charger un assemblage dans le dossier de mon programme (AppX je pense)?

+0

Notez que je l'origine essayé d'aller les références de montage arbre en utilisant 'Assembly.GetEntryAssembly()' et 'Assembly.GetReferencedAssemblies()', mais ils ne sont pas disponibles dans une application de magasin. De plus, je ne peux pas facilement obtenir le nom de type qualifié de l'assemblage (ce qui élimine le besoin d'obtenir tous les assemblages) pour diverses raisons compliquées lorsque j'obtiens les types sous forme de chaîne dans un assemblage différent par rapport à la lecture. –

+0

'Type.GetType (" MyNamespace.MyType ")' ne fonctionne pas? – I4V

+0

Non, il doit être qualifié ou non dans l'assemblage actuel. –

Répondre

1

Essayez d'extraire le nom de fichier sans extension

var filename = file.Name.Substring(0, file.Name.Length - file.FileType.Length); 

AssemblyName name = new AssemblyName() { Name = filename }; 
Assembly asm = Assembly.Load(name); 
Questions connexes