2015-09-15 1 views
0

J'ai hérité d'un site Web asp.net qui est un mélange de webforms VB.Net et C# MVC.article avec la même clé a déjà été ajouté lors de l'utilisation resx

Récemment, le déploiement sur le serveur, nous obtenons une erreur:

System.ArgumentException: An item with the same key has already been added. at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) at System.Reflection.RuntimeAssembly.InternalGetSatelliteAssembly(String name, CultureInfo culture, Version version, Boolean throwOnFileNotFound, StackCrawlMark& stackMark) at System.Resources.ManifestBasedResourceGroveler.GetSatelliteAssembly(CultureInfo lookForCulture, StackCrawlMark& stackMark) at System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark) 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.GetObject(String name, CultureInfo culture, Boolean wrapUnmanagedMemStream) at System.Resources.ResourceManager.GetObject(String name, CultureInfo culture) at System.Web.Compilation.BaseResXResourceProvider.GetObject(String resourceKey, CultureInfo culture)

Cette erreur persiste jusqu'à ce que l'application est remis à zéro (en modifiant légèrement le web.config).

Le site utilise des fichiers resx pour les traductions et si nous détectons l'exception, il semble provenir de la première utilisation d'une chaîne de ressources.

Je pense qu'il s'agit d'un doublon de Temporary files asp.net resx files, "item with the same key has already been added" mais je n'ai pas assez de 'rep' pour commenter ce message. Mon intuition est qu'il est causé par une condition de concurrence pour charger l'ensemble satellite pour le fichier de ressources locales. Mon autre idée est que c'est un vrai doublon parce que nous hébergeons le même code sur 2 sites IIS différents sur le même serveur (un pour la «mise en scène» et l'autre pour la production). Ceci est peut-être à l'origine du chargement d'une copie dupliquée de l'assemblage de ressources à partir des fichiers temporaires IIS. Pour essayer de le prouver, j'ai supprimé les fichiers temporaires et l'erreur disparaît, mais cela pourrait être le résultat de la recompilation de l'application.

Nous n'obtenons pas cette erreur en développement, seulement après un déploiement sur le serveur (en utilisant MSDeploy). J'ai essayé de supprimer des fichiers IIS temporaires lors du déploiement, mais cela n'a fait aucune différence.

Potentiellement un problème distinct ou un symptôme de ceci mais nous voyons également le CPU aller à 100% sur le déploiement et le processus de travail montre un certain nombre de demandes qui semblent juste courir pour toujours. Je me demande si cela montre que les threads sont bloqués - peut-être tous en attente de chargement de l'assembly de ressources satellite?

Quelqu'un at-il déjà vu ce comportement et peut-il nous éclairer ou explorer d'autres pistes?

Répondre

0

J'ai réussi à résoudre ce problème en mettant à jour l'assembly RavenDB.Client. Le problème est mieux décrit ici: https://groups.google.com/forum/#!topic/ravendb/Y7q3EZ5P8Cg

Alors que la solution de contournement mentionnée n'a pas résolu le problème, la mise à jour vers la dernière version du package nuget l'a résolu.