2013-08-27 2 views
2

J'utilise la localisation sur mon application et je veux obtenir une liste de base de Resource fichiers qui sont utilisés dans la langue de base. La recherche montre que la déclaration suivante devrait me donner ce que je veux.C# GetManifestResourceNames() ne renvoie rien

Assembly a = System.Reflection.Assembly.GetExecutingAssembly(); 
string[] resNames = a.GetManifestResourceNames(); 

Je ne reçois pas d'erreur, juste un tableau de chaîne vide (string[]). J'ai testé cela sur ma machine locale avec IIS Express en cours d'exécution et sur mon serveur de production.

En examinant localement la variable Assembly, la valeur affectée est la suivante.

{App_Code.i5gd5jfv, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null} 

Toute aide est grandement appréciée! Merci d'avance!

+1

Vous code obtient les noms de ressources de l'assembly en cours d'exécution. Si vos ressources sont dans un assembly différent, l'obtention des noms de ressources de l'assembly en cours d'exécution n'aide pas. En d'autres termes: Votre question actuelle est la suivante: Comment obtenir l'instance 'Assembly' de l'assembly qui contient mes ressources, s'il ne s'agit pas de l'assembly en cours d'exécution. – dtb

+0

@dtb, je vois. Ça a du sens. Retour à la recherche – JoeFletch

+0

@dtb, j'ai trouvé une solution. Ce n'est peut-être pas joli, mais ça marche si loin pour moi! Merci pour votre contribution à ce sujet! – JoeFletch

Répondre

0

Basé sur le commentaire de dtb, je vois que je ne faisais pas référence au proper assembly. J'ai donc quelques-uns avec le code suivant afin d'obtenir le bon Assembly pour le App_GlobalResources, puis obtenir la liste des ressources.

Assembly[] assemblyList = AppDomain.CurrentDomain.GetAssemblies(); 
foreach (Assembly assembly in assemblyList) 
{ 
    string assemblyName = assembly.GetName().Name.ToString().Split(new char[] { '.' })[0]; 

    if (assemblyName == "App_GlobalResources") 
    { 
     foreach (string s in assembly.GetManifestResourceNames()) 
     { 
      //do stuff with the list of resources. 
     } 
    } 
} 

S'il y a un meilleur moyen, s'il vous plaît faites le moi savoir!

+0

L'assembly App_GlobalResource contient-il des classes? Le moyen le plus simple d'obtenir l'instance 'Assembly' est généralement quelque chose comme' typeof (SomeNamespace.SomeClass) .Assembly'. – dtb

+0

Je ne suis pas vraiment sûr de comprendre cela. On dirait que ce serait beaucoup plus propre et probablement plus rapide. – JoeFletch