Mon Fonctionnement interne Code:System.ArgumentNullException dans ResourceManager.GetString
System.Resources.ResourceManager resourceManager = GetResourceManager();
string str = resourceManager.GetString("delete", new CultureInfo(1033));
dans le projet actuel compilé dans tout .NET 2.0 fonctionne comme exceptés. La variable str contient la chaîne de ressource pour LCID 1033 - Supprimez, c'est correct.
Nous mettons actuellement à niveau vers .NET 4.0, projet recompilé sous le framework cible .NET 4.0. Maintenant compilé en tant qu'assemblages .NET 4.0, il lève l'exception System.ArgumentNullException avec le message La valeur ne peut pas être nulle. trace .Stack:
at System.Threading.Monitor.Enter(Object obj)
at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark)
at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
at System.Resources.ResourceManager.GetString(String name, CultureInfo culture)
intéressante ici est stacktrace, où il pointe méthode du cadre interne dans ResourceManager.InternalGetResourceSet qui provoque appeler Monitor.Enter avec un objet nul. Mais j'appelle la méthode GetString avec des paramètres non null GetString ("delete", nouveau CultureInfo (1033)).
Ce bug semble être similaire à System.ArgumentNullException in System.Threading.Monitor.Enter. Peut-être un bug dans Monitor.Enter, ou autre chose?
Mise à jour: Lorsque je regarde dans le débogueur à l'objet resourceManager.ResourceSets.Items[2].Value.Table["delete"]
alors il contient la valeur de chaîne "Supprimer". Les éléments de propriété [2] pointent ici sur LCID 1033. Cela signifie que le gestionnaire de ressources contient déjà la chaîne localisée pour la clé de ressource supprimer dans le langage . Est-ce que quelqu'un sait où peut être une erreur?
Très intéressant. J'ai essayé d'explorer la classe ResourceManager dans Reflector mais je n'ai que mscorlib 2.0. Si c'est un bug, je le rechercherais dans la méthode ResourceManager.InternalGetResourceSet. Utilisez-vous .NET ou Mono?Je voudrais être d'aide –
J'utilise .NET sur Windows, FW 4.0, juste décompilé avec Reflector, mais n'a pas pu trouver de choses inhabituelles dans la méthode interne. Jetez un oeil à cette méthode décompilée ici - http://paste.org/pastebin/view/25636. – psulek
Maintenant, j'utilise .NET Reflector addin dans Visual Studio pour déboguer mscorlib, et découvre qu'il tombe dans la ligne 14 - lock (localResourceSets) (sur l'échantillon collé) – psulek