web-dev-qa-db-fra.com

Erreur d'intellisense de référence ambiguë de Resource.Designer.cs

Je rencontre un bug particulier lors du développement sur Visual Studio 2017 que j'ai pu ignorer pendant un certain temps, mais commence maintenant à vraiment bug me .

Je parle de ce problème comme d'un bug plutôt que d'une erreur parce que je Je peux toujours créer mes projets dans Visual Studio et les déployer sur mon périphérique de développement sans erreurs ni avertissements de la sortie de la génération. Cela peut sembler bien ignorer un peu, mais avec le temps, c'est devenu un problème parce que mon intellisense le souligne en rouge comme une erreur

a

chaque fois que je référence des attributs de la classe Resource. Comme vous pouvez le deviner, je fais souvent référence à cette classe et l'éditeur Visual Studio finit par être encombré de ces "erreurs" qui (a) entravent ma capacité à trouver des erreurs réelles dans mon code et (b) m'irrite au-delà de toute raison ...

Enquête "erreur"

  • Comme le montre la dernière image, intellisense récupère une "référence ambiguë" pour chaque attribut de la classe Resource. Lorsque je vérifie mon fichier Resource.Designer.cs, je ne vois qu'une seule référence, mais j'obtiens une deuxième erreur

b.

  • Il me dit maintenant qu'un "Membre du même nom est déjà déclaré" . Cela m'amène à croire qu'il existe un deuxième fichier Resource.Designer.cs, mais mon explorateur de solutions et l'explorateur Windows n'en affichent qu'un seul.

c

Solutions tentées

  • A changé l'espace de noms de InventoryApp (l'espace de noms par défaut du fichier) en InventoryApp.Resources. Cela m'a débarrassé des erreurs horribles mais, lors de la construction du projet, il rétablit l'espace de noms dans le fichier à sa valeur par défaut, et les erreurs réapparaissent. On m'a également dit par quelqu'un qui sait mieux que c'est un gros non.
  • Supprimé le fichier Resource.Designer.cs, supprimé les dossiers "obj" et "bin" du projet, nettoyé et reconstruit la solution, puis ajouté le nouveau Resource.Designer.cs fichier de retour à ma solution. Cela n'a rien fait pour résoudre le problème.
  • Créé un projet entièrement nouveau à partir de zéro. Même après avoir créé un Blank Android App à partir des modèles Visual Studio, l'erreur persiste. Cela pose la question: Est-ce un problème avec mon installation de Xamarin.Android?

Notes annexes

  • L'action de construction du fichier Resource.Designer.cs est définie sur "Compiler"
  • Le fichier de configuration . Csproj contient les balises:

    <AndroidResgenFile>Resources\Resource.Designer.cs</AndroidResgenFile>
    <AndroidResgenClass>Resource</AndroidResgenClass>
    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
    <AndroidUseLatestPlatformSdk>false</AndroidUseLatestPlatformSdk>
    <TargetFrameworkVersion>v7.1</TargetFrameworkVersion>
    <AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
    <MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
    <MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
    
18
dingFAching

Mise à jour 6/6/2018

Si vous avez ReSharper, vous pourrez très probablement ignorer ma solution par projet décrite ci-dessous et, à la place, installer simplement la dernière version (actuellement ReSharper 2018.1.2). Apparemment, le problème sous-jacent a été provoqué par un bogue dans une version précédente. La mise à niveau a résolu le problème pour moi.

Voir youtrack.jetbrains.com/issue/RSRP-469636 pour plus d'informations.

Merci à @davidbauduin sur les forums Xamarin pour ces informations.


Je crois avoir compris le problème sous-jacent et avoir une solution viable.

Solution

Ajoutez ce qui suit au <PropertyGroup> section dans votre fichier .csproj:

<AndroidUseManagedDesignTimeResourceGenerator>False</AndroidUseManagedDesignTimeResourceGenerator>

Raison

Alors que les versions précédentes de Visual Studio avaient cette fonctionnalité désactivée par défaut, la dernière mise à jour VS2017 (15.7.3) l'a activée. Cette fonctionnalité génère un deuxième fichier Resources.Designer.cs qui entraîne le problème de référence ambigu.

Vous pouvez vérifier en survolant la constante de ressource avec l'erreur Intellisense, en cliquant avec le bouton droit, en sélectionnant "Aller à la définition" et en sélectionnant le 1er élément, qui vous amène à un fichier Resource.Designer.cs. Si vous répétez, mais sélectionnez le 2ème, vous serez redirigé vers un autre fichier Resource.Designer.cs. L'un de ces points pointe vers le fichier obj\Debug\designtime\Resource.Designer.cs. En définissant cette fonctionnalité sur False comme décrit ci-dessus, ce fichier Resource.Designer.cs dans le chemin obj\Debug\designtime ne sera pas généré.

Informations concernant la fonction AndroidUseManagedDesignTimeResourceGenerator:

https://developer.xamarin.com/releases/Android/xamarin.Android_8/xamarin.Android_8.1/#design-time-builds-managed-resource-parser

https://github.com/dotnet/project-system/blob/master/docs/design-time-builds.md#design-time-builds

J'espère que cela t'aides!

35
Robert Bruce