2017-09-07 2 views
1

J'ai mon projet Xamarin.Forms (PCL approach). En outre, j'ai ajouté un autre PCL comme référence à ce projet en référençant la sortie dll du dossier Debug. Ce PCL est également localisé après la même approche que le projet Xamarin.Forms en utilisant des fichiers RESX et en définissant la culture avec AppResources.Culture = ci;Utiliser la localisation dans un fichier PCL

Le problème actuel est, que cela fonctionne comme prévu sur mon ordinateur local, mais pas sur le serveur de construction (Jenkins appelant MSBuild). La différence est aussi que je travaille dans le mode Debug, le fichier apk généré (Android) est construit dans le mode Release. Mais quel que soit le mode, localement la localisation fonctionne bien dans les deux modes! Sur le serveur de construire le fichier apk résultant contient maintenant un mélange de deux langues:

  • chaînes localisées selon la langue de l'appareil en cours (projet Xamarin.Forms)
  • des chaînes non localisées de la PCL (ne montrant que des chaînes supplémentaires à partir du fichier RESX neutre au langage)

Maintenant, je ne comprends pas pourquoi cela fonctionne localement, mais pas du côté du serveur de construction. Ce que j'ai essayé:

  • J'enregistré la culture dans le « défectueux » généré apk du serveur de build et il est réglé correctement (à la fois l'application et le PCL supplémentaire)
  • J'ai vérifié le loaded resources et un AppResources.resources montre des haut (apparemment, il contient tous les fichiers RESX, y compris les ressources propres à la langue?)
  • J'ai essayé d'appeler localement MSBuild semblable à la tâche accomplie sur le Jenkins construire serveur, mais comme toujours, localement, il fonctionne bien
  • J'ai suivi les instructions de Xamarin, mais je n'ai trouvé aucune solution
  • La culture de dispositif est par ex. en-US, mais mon fichier RESX de langue neutre est défini sur en. J'ai essayé d'ajouter un fichier AppResources.en-US.resx au fichier PCL supplémentaire, mais le système affiche toujours le contenu du fichier RESX neutre du langage.

Est-ce un problème de configuration sur le serveur de construction en combinaison avec MSBuild? Si oui, qu'est-ce qui est différent ou qui manque? Ou est-ce un problème de code? Est-ce un problème en utilisant le même nom AppResources pour la localisation dans les deux projets (XF et PCL supplémentaires)? Avez-vous des indices pour que je trouve ce problème?

Répondre

0

Le problème était que le résultat de la PCL (une DLL) a été copié dans le projet XF. Mais les artefacts de construction du PCL contiennent également des ressources spécifiques à la langue (appelées satellite assembly). La structure du dossier se présente comme suit:

MyLib/bin/Debug/MYLIB.DLL
MyLib/bin/Debug/fr/MyLib.resources.dl

Le dossier en dépend de votre langues prises en charge et peuvent différer. Si je copie tous les fichiers requis avec la même structure de dossiers au projet XF, la traduction fonctionne comme prévu. C'était la raison pour laquelle cela fonctionnait localement. Il semble qu'il ne soit pas nécessaire de set the Culture dans les fichiers de ressources de la PCL supplémentaire.