Comment puis-je obtenir dynamiquement toutes les ressources de mon assemblage actuel? J'ai essayé deux méthodes, GetManifestResourceNames et GetResourceSet sans succès. Je suis à l'aise avec des solutions dans VB.net ou C#..NET: Obtenir des ressources par réflexion
Première méthode
Cette première méthode ne retourne un tableau de longueur 1, avec cette valeur « MyNameSpace.Resources.resource ». Le problème est qu'il y a plus d'une ressource dans ce fichier.
Dim ca As Assembly = Assembly.GetExecutingAssembly
Dim rn() As String = CurrentAssembly.GetManifestResourceNames()
Deuxième méthode
Dim ca As Assembly = Assembly.GetExecutingAssembly
Dim crm As New ResourceManager("", ca)
''//Dim CurrentResourceManager As New ResourceManager(_
"MyNamespace.Resources.resources", CurrentAssembly)
''//Dim CurrentResourceManager As New ResourceManager(_
"My.Resources", CurrentAssembly)
Dim rs As ResourceSet = CurrentResourceManager.GetResourceSet(CultureInfo.CurrentCulture, True, True)
Dim rs As ResourceSet = crm.GetResourceSet(_
CultureInfo.CurrentCulture, True, True)
MissingManifestResourceException était non gérée
Impossible de trouver des ressources appropriées pour la culture spécifiée ou la culture neutre. Assurez-vous que ".resources" a été correctement intégré ou lié dans l'assembly "MyProgram" au moment de la compilation, ou que tous les assemblys satellites requis sont chargeables et entièrement signés.
Solution (selon Hans Passant)
Copiez le Namespace du Resources.Designer.vb
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MyNamespace.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
et placez-le dans le code
Dim CurrentResourceManager As New ResourceManager(_
"MyNamespace.Resources", CurrentAssembly)
Dim rs As ResourceSet = CurrentResourceManager.GetResourceSet(_
CultureInfo.CurrentCulture, True, True)
+1 sur l'indice de recherche d'un exemple de code. Parfois, je ne réalise même pas qu'il existe, et je le trouve toujours extrêmement utile. –
Question: Comment se fait-il quand je compile avec "vbc/t: exe myfile.vb/res: myresouce1/res: myresource2" Je peux obtenir toutes mes ressources avec GetManifestResourceNames mais quand j'utilise l'IDE ils sont tous cachés? –
Annuler cela ... Resgen va générer un fichier resx. –