12

J'ai une forme assez simple que je veux localiser (j'ai en fait pas mal de choses dans ce projet, ils ont tous le même problème). Lorsque je définis la propriété de formulaire Localizable à true Visual Studio génère un fichier .resx avec le nom de formulaire (comme vous vous y attendez). Le problème est cependant qu'il ajoute toutes sortes de choses au fichier .resx que rien d'autre ne peut ouvrir (par exemple WinRes, ResEx, Simple Resx Editor, Éditeur RESX etc).Visual Studio crée des fichiers Resx non valides

L'erreur que je reçois est:

fichier ResX type System.Drawing.Point, System.Drawing, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a les données à la ligne 125, position 4 ne peut pas être localisé. La ligne 127, position 5. ne peut pas être analysée.

Ligne 124 à 127 est:

<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
<data name="lblUsername.Location" type="System.Drawing.Point, System.Drawing"> 
    <value>26, 24</value> 
</data> 

Maintenant, je suis en supposant que Visual Studio ajoute ce que je puisse déplacer les boutons etc en fonction autour de la langue (je ne ai pas besoin ou si vous voulez cette capacité). Cependant, il renvoie l'erreur ci-dessus dans tous les éditeurs autres que que Visual Studio.

Les seules extensions que j'ai installé (selon l'Extension Manager) sont:

  • Mettez en surbrillance toutes les occurrences de mot sélectionné
  • Microsoft Ruban pour WPF (que je ne suis pas en utilisant dans ce projet)

Le gestionnaire de compléments n'affiche aucun complément.

Edit:

Après avoir creusé autour et éditer manuellement le fichier .resx, le problème est en fait avec la ligne 124 <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> spécifiquement Version=4.0.0.0.

Si je le mets à Version=2.0.0.0 alors tout fonctionne, à la fois dans Visual Studio, et dans tous les programmes externes. Le problème avec ceci est que si j'édite quelque chose dans Visual Studio, il le réinitialisera à Version=4.0.0.0.

Pour l'instant, je vais définir le cadre cible à .NET Framework 3.5 Client Profile afin que Visual Studio ne remplace pas la version. Ceci est une solution de contournement et signifie que je ne peux pas utiliser les fonctionnalités .NET 4.0. Ai-je raison de deviner qu'il y a un bogue dans le .NET Framework, ou chaque éditeur .resx (y compris celui de Microsoft).

Edit 2: Il est avéré que lorsque je tentais d'utiliser l'outil de Microsoft WinRes.exe je lançais en fait le .NET Framework version 3.5, depuis le .NET Framework version 4.0 ne soit pas installé.

J'ai dû installer le SDK .NET Framework 4.0 de http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/winsdk_web.exe et j'ai ensuite pu éditer les fichiers .resx avec WinRes.exe 4.0

+0

Avez-vous fait 'PublicKeyToken = REMOVED' OU est-ce le message d'erreur exact? Aussi le dessin est épelé mal là. – leppie

+0

C'est moi qui tape ça. Je vais le modifier et l'ajouter. Aucun mal dans une clé publique étant là je suppose. –

+0

@Blair McMillan: Pas le vôtre de toute façon :) – leppie

Répondre

6

Visual Studio crée les fichiers * .resx corrects. Le problème est que les outils que vous essayez d'utiliser ont été créés pour la version précédente de la spécification. C'est pourquoi votre solution de contournement fonctionne.

Veuillez vérifier s'il n'existe pas de versions ou de correctifs plus récents pour les outils de localisation que vous utilisez.

+0

True. Je ne peux pas trouver la version 4.0 de WinRes.exe (l'outil de Microsoft qui est destiné à venir avec VS). –

+0

WinRes.exe 4.0 est installé avec .NET Framework SDK qui peut être téléchargé depuis http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/winsdk_web.exe –

3

Dans le fichier .resx, recherchez la première ligne de la chaîne codée en base64. La fin devrait être "j00LjAuMC4w" (ce qui signifie .net 4.0). Essayez de changer cela en "j0yLjAuMC4w" (ce qui signifie .net 2.0). A travaillé pour moi. Merci à Luis Mack à http://connect.microsoft.com/VisualStudio/feedback/details/532584/error-when-compiling-resx-file-seems-related-to-beta2-bug-5252020#

+0

Ce n'est pas le changement que j'ai fait, mais cela m'a fait réaliser que le problème était une bibliothèque avec la mauvaise version. – DCShannon

3

Parfois, dans certains cas, le concepteur de formulaires Windows se bloque lors de la validation du formulaire avec les fichiers * .resx.

Les contrôles dans lesquels une source de données a été attachée sont affectés par ce comportement. Dans mon cas, je suis arrivé quelques DataSets comme DataSource pour Grids, Combos ...

J'ai donc ouvert le concepteur et it't me disant qu'il ne peut pas ouvrir en raison d'un problème avec un contrôle nommé: blabla

après vérification le designer-fichier j'ai trouvé que rien ne va pas avec le contrôle c'est juste le fichier * .resx pointant vers une mauvaise source, parce que j'ai refacturé le DataSet. Donc le fichier * .resx n'a pas été mis à jour à cause de ce refactoring.

J'ai ouvert le fichier * .resx et j'ai simplement recherché l'identificateur du contrôle et trouvé un code codé Base64. La suppression de la valeur dans le bloc sans supprimer les balises d'environnement résoudra le problème pour ce contrôle car le concepteur de formulaires Windows va automatiquement actualiser et lire le contenu manquant dans le fichier * .resx.

0

Cette erreur est présentée lorsque le compilateur a perdu la référence d'un objet ou lorsque vous avez modifié une propriété importante de cet objet, par exemple si vous avez une Grille sur le formulaire tout setup (cela signifie que vous utilisez un DataSet en tant que votre source de données pour remplir votre grille), et vous changez le nom de votre DataSet VS perdu ce lien, il vous apportera ce message.

Questions connexes