IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Phone .NET Discussion :

Directive de compilation pour un ViewModel [MVVM]


Sujet :

Windows Phone .NET

  1. #1
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut Directive de compilation pour un ViewModel
    Hello,

    J'ai une Portable Class Library dans laquelle se trouve un Helper. Dans ce Helper je tente de mettre en place une fonction qui me retourne la version de l'application en fonction de la plateforme (WP ou Win8).

    Le code de la fonction est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
                public static string GetApplicationRelease()
                {
    #if NETFX_CORE
                    return Pakage.Current.Id.Version.ToString();
    #elif WINDOWS_PHONE
                                    System.Uri manifest = new System.Uri("WMAppManifest.xml",System.UriKind.Relative);
                    var si = App.GetResourceStream(manifest);
                    if(si != null)
                    {
                        using(System.IO.StreamReader sr = new System.IO.StreamReader(si.Stream))
                        {
                            bool haveApp = false;
                            while(!sr.EndOfStream)
                            {
                                string line = sr.ReadLine();
                                if(!haveApp)
                                {
                                    int i = line.IndexOf("AppPlatformVersion=\"",System.StringComparison.InvariantCulture);
                                    if(i >= 0)
                                    {
                                        haveApp = true;
                                        line = line.Substring(i + 20);
                                        int z = line.IndexOf("\"");
                                        if(z >= 0)
                                        {
                                            // if you're interested in the app plat version at all  
                                            // AppPlatformVersion = line.Substring(0, z);  
                                        }
                                    }
                                }
     
                                int y = line.IndexOf("Version=\"",System.StringComparison.InvariantCulture);
                                if(y >= 0)
                                {
                                    int z = line.IndexOf("\"",y + 9,System.StringComparison.InvariantCulture);
                                    if(z >= 0)
                                    {
                                        // We have the version, no need to read on.  
                                        return line.Substring(y + 9,z - y - 9);
                                    }
                                }
                            }
                        }
                    }
     
                    return "Unknown";
    #else
                    return "Unknown";
    #endif
                }
    En fait, il me retourne le Unknown du dernier #else

    Je ne comprends pas comment ça fonctionne ça ...

    Merci
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 242
    Points : 296
    Points
    296
    Par défaut
    Hello DotNet!

    [troll]Merci de mettre de l'ambiance ici! xD [/troll]

    Pour ton soucis, il faut que tu précises les variables de preprocessing que tu vas utiliser dans ta portable library.
    Pour ce faire, va dans les propriétés de ton projet, et ajoute "WINDOWS_PHONE" au niveau des conditions de compilation.

    Une petite image par ici


    Les directives pré-processeur servent à ce que le compilateur ne compile uniquement le code dédié à la plateforme où il va être exécuté.

    Cordialement,
    Mafyou.

  3. #3
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    L'ambiance parce que je pose des questions bêtes ?

    Après j'avais trouvé cette info entre temps mais le problème est que le code n'est pas reconnu dans la portable class library.

    Par exemple:

    Je veux faire une fonction qui me retourne la version de l'application:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #if WINDOWS_PHONE
     ... le code qui retourne la version
    #elif NETFX_CORE
     ... le code qui retourne la version pour WinRT
    #endif
    Le problème est que le pour le code qui retourne la version d'une application WinRT c'est:

    Package.Current.Id.Version.ToString();

    Et bien ce code n'est pas reconnu au niveau de la PCL

    Donc je ne sais pas comment il faut faire.

    Merci
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  4. #4
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 242
    Points : 296
    Points
    296
    Par défaut
    D'après cette source et cette source, on dirait que la PCL n'est compatible que pour W8 / WP8.

    Du coup, on ne pourrait pas avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #if WINDOWS_PHONE
     ... le code qui retourne la version
    #elif NETFX_CORE
     ... le code qui retourne la version pour WinRT
    #endif
    Mais uniquement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #if NETFX_CORE
    // code for Windows 8
    #else
    // code for Windows Phone 8
    #endif
    Voilà. A confirmé, mais je pense avoir vu juste.

    ps: sa ne à rien de répondre à troll :-)

  5. #5
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Ouaip,

    mais ton truc ça fonctionne pas ...

    Car dans ma PCL j'ai mes ViewModels et si je fais ce code il y a une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #if NETFX_CORE
     return Package.Current.Id.ToString();
    #else
     ...
    #endif
    Le code Package... est souligné en rouge !
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  6. #6
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Help
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Points : 460
    Points
    460
    Par défaut
    Bonjour,

    Je n'ai pas les moyens de tester le code, mais en lisant le lien fournit par Maf77
    On peut voir ceci
    Doesn’t use conditional compilation

  8. #8
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Ce que je constate dans mes différentes tentatives c'est que par exemple le namespace Windows.UI.Xaml n'est pas accessible depuis une PCL et donc mettre en place une navigation semble difficile ...

    Et du coup, je vois pas comment faire une navigation depuis la PCL qui gère à la fois WP et WinRT ...

    Je rencontre le même problème avec les fichiers de styles qui ont:

    - Des polices communes aux appli WP et WinRT
    - Des thèmes communs

    Et qu'on arrive pas à mettre dans une PCL on plus .... (Du moins je n'y suis pas parvenu)
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  9. #9
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 242
    Points : 296
    Points
    296
    Par défaut
    Créée un nouveau topic en expliquant précisément ton problème.
    Je ferais mon possible pour ramener des personnes compétente rapidement :-)
    aussi, tu peux poster sur les forum msdn au passage.

    Cordialement,
    Mafyou.

  10. #10
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Ok,

    merci bien.

    En fait, avant de venir ici je fais des recherches sur le web mais soit je m'y prend mal soit il n'y a pas grand chose sur ce thème ...
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  11. #11
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Citation Envoyé par DotNET74 Voir le message
    Ce que je constate dans mes différentes tentatives c'est que par exemple le namespace Windows.UI.Xaml n'est pas accessible depuis une PCL et donc mettre en place une navigation semble difficile ...

    Et du coup, je vois pas comment faire une navigation depuis la PCL qui gère à la fois WP et WinRT ...
    Tu as plusieurs techniques pour partager du code entre différentes plateformes (http://msdn.microsoft.com/en-us/libr...v=vs.105).aspx). Tu dois prendre celle adaptée à ton problème.

    Dans le cas de la navigation, tu peux utiliser les interfaces: http://msdn.microsoft.com/en-us/libr...singinterfaces

    Tu définis une interface du genre NavigationInterface avec les méthodes qui vont bien. Cette interface va se trouve dans la PCL. Les ViewModel utiliseront cette interface.
    Tu aura ensuite deux implémentations différentes de cette interface pour chacune des plateformes (une dans une librairie WP8, l'autre dans une librairie W8). A l'exécution tu injectes (via la méthode de ton choix) la bonne implémentation de ton interface au ViewModel en fonction de la plateforme.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Free Pascal] Directives de compilation pour profiter d'un processeur arithmétique
    Par NOVICE76 dans le forum Free Pascal
    Réponses: 1
    Dernier message: 06/10/2014, 13h59
  2. Directives de compilation pour g++
    Par Jfrancois57 dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 09/11/2005, 11h23
  3. Réponses: 2
    Dernier message: 15/05/2004, 18h33
  4. Compiler pour msdos(5-6)
    Par jalfonsi dans le forum Choisir un environnement de développement
    Réponses: 3
    Dernier message: 05/04/2004, 22h05
  5. Directives de compilations.
    Par ushu dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2003, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo