none
Migrer une application WinForm :Suite RRS feed

  • Question

  • Bonsoir,

    Dans mon appli WinForm initialement sous Framework 2.0, j'ai introduit des traitements faisant appel aux assembly PresentationCore et WindowsBase, pour prendre en compte System.Windows.Media.Imaging.

    System.Windows.Media.Imaging permettant d'accéder aux métadonnées EXIF des images TIFF avec WPF.

     

    L'appli principale et l'assembly qui utilise System.Windows.Media.Imaging ciblent le .NET Framework 4 Client Profile.

    Déploiement en ClickOnce.

    L'appli fonctionne très bien sur les postes de développements mais l'accès aux EXIF plante sur les postes clients...

     

    Avez-vous une idée de l'origine du problème et surtout du remède à apporter ?

    Merci de votre aide.





    Alain
    vendredi 7 janvier 2011 20:39

Réponses

  • Bonjour,

    Supprimez les références à PresentationCore et WindowsBase et rajoutez les à nouveau. J'ai l'impression que votre projet cible les DLL du .NET 3.0 et non celui du 4.0 (Client Profile).

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    • Marqué comme réponse AchLog jeudi 13 janvier 2011 14:08
    dimanche 9 janvier 2011 21:50
    Modérateur
  • Bonjour,

     

    Pour déboguer une librairie de l’application déployée essayez les pas suivants :

    1.   Déployez l’application.

    2.   Lancez l’application.

    3.   Dans Task Manager, sélectez le processus de l’application et « Open file location » dans le menu contextuel

    4.   Fermez l’application.

    5.   Dans le répertoire de l’application déployée, remplacez les librairies que vous voulez déboguer avec les versions « debug » (elles sont en release, par défaut).

    6.   Lancez à nouveau l’application.

    7.   Attachez au processus de l’application avec Visual Studio (Debug->Attach to process).

    8.   Ouvrez le fichier qui vous intéresse du dll débogué et mettez un point d’arrêt.

    9.   L’exécution s’arrêtera a ce point d’arrêt quand l’instruction concernée sera exécutée.

     

    Vous pouvez essayer aussi cette approche décrite dans MSDN :

    Débogage des applications ClickOnce qui utilisent System.Deployment.Application

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    • Marqué comme réponse AchLog jeudi 13 janvier 2011 14:09
    jeudi 13 janvier 2011 11:40

Toutes les réponses

  • Il semblerait que le Framework 4.0 Client Profile ne soit pas suffisant mais qu'il soit nécessaire d'installer Framework 3.5 SP1.

    Comment expliquer cela ?


    Alain
    dimanche 9 janvier 2011 21:16
  • Bonjour,

    Supprimez les références à PresentationCore et WindowsBase et rajoutez les à nouveau. J'ai l'impression que votre projet cible les DLL du .NET 3.0 et non celui du 4.0 (Client Profile).

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    • Marqué comme réponse AchLog jeudi 13 janvier 2011 14:08
    dimanche 9 janvier 2011 21:50
    Modérateur
  • Bonsoir Gilles,

    Et peut-on vérifier ce que cible le projet ?


    Alain
    dimanche 9 janvier 2011 22:29
  • Bonjour,

     

    Dans Visual Studio, dans le répertoire References de votre solution, choisissez Properties dans le menu contextuel d’une référence et vérifiez la propriété Runtime Version. Elle vous dira la version de framework.

     

    Vous pouvez modifier le Target Framework dans les propriétés du projet aussi : click-droit sur le projet dans l’explorateur de solution -> Propriétés -> Target Framework.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    lundi 10 janvier 2011 12:29
  • Ok Alex, mais j'ai vérifié après avoir fait la manip indiquée par Gilles, et là tout est bon...

    Deux autres questions :

    1. Mon appli comporte des assembly FW 2.0 et d'autres FW 4.0 ; est-ce correcte de cibler plusieurs versions de FW dans une même appli (je pense que oui mais j'aimerais avoir confirmation) ?
    2. Une appli qui cible uniquement le FW 2.0, peut-elle s'exécuter sous FW 4.0 ? et, dans l'affirmative, son fonctionnement est-il strictement identique ? En particulier l'ordre d'exécution des thread peut-il être différent ?
    Je constat que depuis que je suis passé sous FW 4.0, l'appli (initialement sous 2.0) ne fonctionne plus tout à fait de la même façon et des erreurs arrivent qui ne se produisaient pas avant. 

    Merci de vos réponses.


    Alain
    lundi 10 janvier 2011 16:30
  • Bonjour,

     

    1.   J’ai essayé d’ajouter une assembly .NET 2.0 dans un projet ciblé pour 4.0, et j’ai toujours la version 4.0 pour l’assembly ajouté, même si j’ajoute le fichier spécifique 2.0. La seule chose que j’ai réussi à faire est d’ajouter dans un projet 4.0 une assembly que j’ai créé dans un autre projet ciblé pour 2.0. Sans avoir une confirmation à partir de la documentation, je pense que oui, il est possible d’utiliser dans le même projet des assemblys crées pour des différentes versions de .NET.

     

    2.   Vous avez besoin de .NET 2.0 pour exécuter un projet 2.0. La version 4.0 ne comprends pas la version 2.0, comme le faisaient les versions précédentes (ex : 3.5 comprenait aussi 2.0). Toutefois, vous devriez avoir la version 2.0 dans Windows, installée par le système de mise à jour de Windows ou par défaut dans Windows 7.

     

    Par défaut, l’application s’exécute avec la version pour laquelle elle est ciblée, mais vous pouvez spécifier d’autres versions aussi dans le fichier de configuration : <supportedRuntime version=…>

     

    Si vous utilisez dans votre application 2.0 des choses qui ont changé dans 4.0 et vous exécutez l’application sous 4.0, vous aurez des erreurs d’exécution.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    mardi 11 janvier 2011 12:59
  • Merci Alex pour cette mise au point.

    Vous dites : "Si vous utilisez dans votre application 2.0 des choses qui ont changé dans 4.0 et vous exécutez l’application sous 4.0, vous aurez des erreurs d’exécution."

    C'est en effet ce qui est arrivé sur le séquencement des évènements liés à la suppression des TabPages dans un TabControl...

    J'en profite aussi pour dire que le raccourcis de l'application créé sur le bureau par ClickOnce (option disponible avec le FW 4.0) ne permet pas de répondre au Drag and Drop...

    Existe t-il une solution pour cela ?

    Bien cordialement


    Alain
    mardi 11 janvier 2011 15:13
  • Bonjour,

     

    Pour contourner le problème avec 2.0 et 4.0, pouvez-vous compiler votre assembly 2.0 pour cibler spécifiquement .NET 2.0 ? Si vous avez aussi .NET 2.0 installé, je pense que ça l’obligera de s’exécuter en utilisant 2.0, et les erreurs ne se manifesteront plus.

     

    Pouvez-vous me donner plusieurs détails sur le drag and drop du raccourci ? Quel sort d’actions envisagez-vous ?

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    jeudi 13 janvier 2011 10:23
  • Bonjour Alex,

    Merci de votre réponse.

    Concernant le raccourcis bureau et ClickOnce, je vous propose de regarder cet autre sujet que j'ai posté et auquel Foleide a répondu : http://social.msdn.microsoft.com/Forums/fr-FR/netdevelopmentfr/thread/5f789af2-46bb-4213-abeb-bc48382e8b9e

    Avez-vous de votre coté une expérience du debug d'une appli déployée par ClickOnce ? Comment debuger sous VS 2010 le code qui s'exécute lorsque l'appli est déployée ?

     

    Concernant les assemblys 2.0 et 4.0. Ok. Mais si le FW 2.0 n'est pas installé sur la cible, l'appli s'exécutera sous 4.0 et les éventuelles erreurs seront là !

    En fait j'ai modifié le code pour qu'il fonctionne bien sous 4.0.

    Bien cordialement.

     

     

     


    Alain
    jeudi 13 janvier 2011 11:06
  • Bonjour,

     

    Pour déboguer une librairie de l’application déployée essayez les pas suivants :

    1.   Déployez l’application.

    2.   Lancez l’application.

    3.   Dans Task Manager, sélectez le processus de l’application et « Open file location » dans le menu contextuel

    4.   Fermez l’application.

    5.   Dans le répertoire de l’application déployée, remplacez les librairies que vous voulez déboguer avec les versions « debug » (elles sont en release, par défaut).

    6.   Lancez à nouveau l’application.

    7.   Attachez au processus de l’application avec Visual Studio (Debug->Attach to process).

    8.   Ouvrez le fichier qui vous intéresse du dll débogué et mettez un point d’arrêt.

    9.   L’exécution s’arrêtera a ce point d’arrêt quand l’instruction concernée sera exécutée.

     

    Vous pouvez essayer aussi cette approche décrite dans MSDN :

    Débogage des applications ClickOnce qui utilisent System.Deployment.Application

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    • Marqué comme réponse AchLog jeudi 13 janvier 2011 14:09
    jeudi 13 janvier 2011 11:40
  • Merci Alex pour votre réponse.

    C'est bien compliqué... Ce ne sais pas si je vais me lancer là-dedans !

    Bien cordialement

     


    Alain
    jeudi 13 janvier 2011 14:03
  • Bonjour Gilles,

    J'ai fait cela, mais pas que cela : j'ai aussi modifié le séquencement de certaines opérations autour de la suppression de TabPages dans un TabControl dont le comportement évènementiels est différent de 2.0 à 4.0. Ça marche !

    Merci donc de votre proposition.

    Bien cordialement

     


    Alain
    jeudi 13 janvier 2011 14:08