Posts taggés Microsoft

ClickOnce Deployement, retour sur une technologie oubliée

0

Une fois une application cliente prête à être utilisée, il faut encore la mettre à disposition des utilisateurs et la maintenir. Pouvoir déployer et mettre à jour ce type d’application est crucial pour une entreprise performante. Ces processus se doivent d’être transparents pour l’utilisateur et simple pour l’administrateur afin de ne pas devenir une gêne pour l’entreprise.

1.    La solution ClickOnce

Microsoft a mis à disposition dans Visual Studio 2005 la solution ClickOnce Deployment, également utilisable à partir du Windows SDK pour faciliter le déploiement et les mises à jour des applications basées sur Windows, c’est-à-dire les applications Windows Forms, Windows Presentation Foundation (WPF) et Console. À noter que ces applications doivent être réalisées en Visual Basic ou C#.

 

1.1 Stratégies de déploiement

 

Une application peut être déployée comme suit :

  • s’installer à partir d’une page web ou d’un emplacement réseau.
  • s’installer à partir d’un support d’installation physique (CD-ROM, clé USB …).
  • s’exécuter à distance à partir d’un emplacement réseau.

L’application peut s’installer et fonctionner en mode hors-ligne ou nécessiter un accès permanent à l’emplacement réseau, sans installation sur l’ordinateur final.

 

1.2 Stratégies de mises à jour

 

Une application installée avec ClickOnce peut se mettre à jour automatiquement : vérifier la disponibilité d’une nouvelle version et replacer automatiquement les fichiers mis à jour. Les mises à jour peuvent être inversées par l’utilisateur ou un administrateur.

Les stratégies sont les suivantes :

  • vérifier la disponibilité de mises à jour au démarrage de l’application.
  • vérifier la disponibilité de mises à jour après le démarrage de l’application en tache de fond.
  • utiliser une interface utilisateur spécifique.

Vous pouvez spécifier la fréquence des vérifications et si les mises à jour sont obligatoires.

 

1.3 SÉCURITÉ

 

Les mécanismes de sécurité de ClickOnce sont basés sur des certificats, des polices de sécurité d’accès par le code et une invite d’approbation. Les certificats permettent d’assurer à l’utilisateur que le programme provient bien de la source vérifiée et n’a pas été modifié. L’administrateur peut ainsi définir une liste blanche d’éditeurs. Le développeur peut enfin définir un périmètre d’exécution de l’application, afin de s’assurer que le code ne peut pas accéder à des ressources protégées. Enfin en dernier recours, si l’application a besoin d’une autorisation qui contrevient aux polices définies, l’utilisateur peut approuver la demande via une fenêtre qui apparaîtra.

2. Procédure de configuration de ClickOnce Deployement

Le moyen le plus simple pour configurer la publication, le déploiement et les mises à jour est d’aller dans l’onglet « Publier » des propriétés du projet.

 

click1

 

C’est ici que vous spécifiez le dossier de sortie de la génération (dossier de publication) et le dossier d’accès aux livrables (dossier d’installation). Vous pouvez préciser la stratégie de déploiement (en ligne, hors ligne) ainsi que la version de publication (différente de la version d’Assembly).

Le développeur a la possibilité d’exclure certains fichiers des livrables avec la fenêtre « Fichiers d’application ».

 

click2

 

Vous pouvez définir dans la fenêtre « Composants Requis » quels composants doivent être installés et à partir de quelle source (officielle en ligne, emplacement de l’application, emplacement spécifique).

 

click3

 

La stratégie de mise à jour peut être configurée dans la fenêtre « Mises à jour des applications ». Le moment, ainsi que la fréquence des mises à jour, peuvent être spécifiés, de même que si l’application dispose d’une version minimale.

 

click4

 

Dans les options, il est possible d’enrichir le livrable avec des informations sur l’éditeur, le nom du produit ou du groupe de produits qui s’afficheront dans la fenêtre d’installation/désinstallation des programmes ainsi que des URL de supports.

 

click5

 

Il est également possible de préciser des comportements lors des déploiements, comme le fichier htm qui permet la récupération du livrable depuis une page Internet ou le démarrage automatique du setup à l’insertion du support d’installation.

 

click6

 

Il est également possible de spécifier l’enregistrement de l’application dans le registre des associations de fichiers, si l’application propose l’ouverture de fichiers avec une extension particulière.

 

click7

 

L’Assistant de Publication vous permet de faire une configuration rapide et minimale, et le bouton « Publier maintenant » de directement lancer le processus de publication.

Notez que le raccourci « Publier » de l’Explorateur de solutions vous amène sur l’Assistant de Publication mais vous autorise à directement publier si les informations requises sont déjà spécifiées.

 

3. Présentation des livrables

Après la publication, vous trouverez dans le dossier de publication divers fichiers que vous devrez déplacer dans le dossier d’installation.

  • setup.exe : exécutable qui va installer l’application.
  • MonApplication.application : manifeste de déploiement. Il s’agit d’un fichier XML de configuration du déploiement et des mises à jour. Vous y trouverez l’implémentation de la stratégie de déploiement ainsi que de la stratégie de mises à jour spécifiée plus tôt. Vous trouverez également des clés de sécurité qui permettent de s’assurer de l’authenticité des mises à jour.
  • Application Files\MonApplication[VersionDePublication]\ : dossier qui va contenir les différentes versions des livrables, avec manifeste de déploiement. Vous pouvez supprimer les anciennes versions si vous êtes sûr de ne plus en avoir besoin.

o   MonApplication.application : manifeste de déploiement.

o   MonApplication.exe.config.deploy : fichier de configuration accessible par l’application (App.config par exemple).

o   MonApplication.exe.deploy : exécutable.

o   MonApplication.manifest : manifeste de l’application (Assembly, dépendances …)

Lors de l’installation hors-ligne, la dernière version sera placé dans les dossiers de cache ..\appdata\Local\Apps\…

 

4. Conclusion

Depuis Visual Studio 2005, la solution ClickOnce de déploiement et de mise à jour offre la possibilité aux développeurs, aux administrateurs et aux utilisateurs de profiter d’applications clientes disponibles et à jour de manière transparente et simple. Le gain d’efficacité apporté par une solution de déploiement et de mise à jour simple et puissante comme ClickOnce permet de réduire les frictions entre utilisateurs finaux et outils de même que les interactions entre utilisateurs et administrateurs, améliorant ainsi le fonctionnement d’une entreprise.

 

 

Pourquoi intégrer TypeScript à ses équipes web?

0

Aujourd’hui, le JavaScript est partout, aussi bien sur les sites Web (JQuery, AngularJS), sur les serveurs Web (NodeJS) que dans les applications mobiles (WinJS ou Apache Cordova). Microsoft a longtemps cherché à fournir aux développeurs .NET des alternatives, comme les controles sous ASP.NET WebForms pour leurs faciliter la vie. Mais cet âge sombre est révolu et le géant de Redmond se fait pardonner en nous offrant un langage qui permet de faire le pont entre C# et JavaScript, j’ai nommé TypeScript. 

Avoir des développeurs .NET séniors c’est super, surtout quand on a besoin de faire des applications .NET : ils sont compétents et efficaces. Mais parce qu’il est probable qu’ils aient débuté avec ASP.NET WebForms, ou avec technologies de clients lourds comme Winforms ou WPF, ils ont naturellement tendance à favoriser les contrôles serveurs sur le JavaScript client.

Les développeurs juniors sont mieux armés car JavaScript est définitivement à la mode, mais le manque d’expérience sur un langage objet par prototype ne pardonne pas. Il n’est pas rare de voir de très grandes disparités de qualité de production entre deux personnes avec à priori la même expérience.

Bref le JavaScript, sauf à partir du moment où il travaille essentiellement avec ASP.NET MVC, proche du web moderne et du JavaScript, n’est pas vraiment critique pour un développeur exclusivement .NET. Et c’est un problème dans un monde où les applications sont de plus en plus hybrides. Le développeur .NET possède les outils cognitifs et l’expérience pour exploiter au maximum le paradigme objet de classe comme on le trouve en C#, en Visual Basic ou en Java. En revanche maîtriser le paradigme objet de prototype qu’on trouve en JavaScript est un effort. C’est une sortie de la zone de confort et la montée en compétence peut parfois être très lente. C’est précisément pour palier à ce type de situation, avec des compétences en programmation orientée objet mais un déficit en JavaScript, que les équipes de Microsoft ont conçu TypeScript.

Le langage TypeScript est utilisé en interne par Microsoft pour la grande partie des travaux JavaScript récent, tel Babylon.js leur moteur 3D pour le Web par exemple. Il possède 2 grandes forces que je vais expliquer à mesure que je vais présenter son fonctionnement : la barrière d’apprentissage quasi-nulle et le fait que l’intégrer représente une prise de risque réellement nulle pour vos projets aussi bien à court terme qu’à long terme.

Comparons les spécifications du C#, du JavaScript et du TypeScript :

C# JS TS
Paradigme objet Classe Prototype Classe
Typage  Statique et dynamique Dynamique Statique et dynamique
Gestion des libraires Simple Simple Simple
Debug Visual Studio Navigateur Visual Studio

On observe donc que le TypeScript a effectivement été développé depuis sa conception initiale pour pouvoir s’intégrer aux travaux en NET. On remarque d’ailleurs que le père du TypeScript est Anders Hejlsberg, également architecte du C#, du Delphi et du Turbo Pascal.

Tout d’abord, il faut savoir que TypeScript est un langage qui va être compilé en JavaScript, que le compilateur de TypeScript a été conçu en TypeScript et que, par conséquence, il est possible de le compiler via Visual Studio 2013.2+ et 2015 (logique pour une technologie Microsoft) mais aussi via Node.JS (logique pour un programme en JavaScript). Autre conséquence directe, puisque le compilateur est un outil autonome, on peut développer en TypeScript avec une myriade d’IDE : Visual Studio 2013.2+ donc, WebStorm, Eclipse, Sublime Text, VI, Emacs et Atom (au moment de la rédaction de ce billet), pour seulement ensuite le compiler en JavaScript.

Revenons sur le langage en lui-même. TypeScript est open source, il est d’ailleurs disponible sur GitHub, et vise à intégrer les spécifications de ECMAScript 6, l’avenir de JavaScript.

En pratique, pourquoi est-ce que le TypeScript est un outil naturellement accessible ? Parce que c’est du JavaScript. Du JavaScript où nous allons pouvoir optionnellement décrire le type des variables de manière statique.

La présence de typage statique offre la possibilité à Intellisense de signaler quand le développeur commet une erreur de type sans que celui-ci ne soit contraint d’engager une démarche fastidieuse pour trouver l’origine de ces erreurs,  ce qui va se traduire en gain de temps substantiel.

 

typescript1

 

Ainsi si vous compilez du code JavaScript en JavaScript via le compilateur TypeScript, il n’y aura aucune différence entre le code d’entrée et le code de sortie. Autrement dit, tout code JavaScript est du code TypeScript.

Le compilateur va uniquement transformer un certain nombre de structures et de syntaxes en JavaScript. Cela tombe bien, car ces structures sont celles, à quelques détails près, du C#.

 

typescript2

typescript3

 

Et cela même dans les fonctionnalités complexes comme les lambdas, les génériques et les inférences de type. Les classes seront transformées en fonctions de prototypage. Il existe même la possibilité d’utiliser des spécificateurs d’accès mais uniquement dans du code TypeScript à typage statique (public, protected et private, en leurs absences la valeur par défaut est public et non protected comme en C#, dans un souci d’harmonie avec le JavaScript). Les interfaces peuvent être implémentées de manière implicite, ce qui facilite l’utilisation à certaines librairies.

L’héritage est également présent, avec son lot de notions à garder en tête par rapport au JavaScript.

 

typescript4

typescript5

typescript6

typescript7

 

Grâce à IntelliSense et au compilateur, nous instaurons un certain cadre de développement, afin de toujours garder une cohérence entre les structures que nous définissons et ce que l’on peut écrire, même quand le JavaScript n’est pas aussi strict. Une notion important en TypeScript est le comportement du mot-clé « this » : en TypeScript, « this » fait toujours référence à l’objet qui appelle la méthode. Le type de « this » dépends donc de sa position.

Donc si on récapitule, les développeurs vont écrire du simili-C# en JavaScript. C’est un coup à prendre mais un coût en temps humain bien inférieur à l’adoption de CoffeeScript, Dart ou d’un autre langage qui propose d’accélérer le travail des développeurs en JavaScript. Non seulement l’adoption est rapide mais elle tellement rapide que quelques heures suffisent pour permettre à un développeur d’augmenter son efficacité.

Si on revient sur le processus d’utilisation du TypeScript, on a vu que l’on  génére du code JavaScript. Donc si pour une raison quelconque, vous ne souhaitez plus utiliser TypeScript, il vous suffit de générer une dernière fois vos fichiers .js et de supprimer vos fichiers .ts. Voilà, votre migration est faîtes. Vous trouverez des exemples de codes ainsi que les spécifications détaillées sur le site http://www.typescriptlang.org/.

Il existe des outils très pratiques, comme TypeLite par exemple, qui va permettre de transformer des interfaces en C# .NET vers du TypeScript.

Finalement, TypeScript est un langage à mi-chemin entre JavaScript et C#. Il convient donc d’avoir à l’esprit les particularités du JavaScript et du C# lors de son utilisation. Malgré tout, l’intégration dans Visual Studio et la disponibilité d’outils en ligne gratuit offre un gain d’efficacité qui permettra à une équipe peu performante dans ses clients légers de produire des applications web évoluées ainsi que d’amener des perspectives différentes comme la découverte de Node.JS.