SharePoint 2016 project templates missing on Visual Studio 2015

imageWhen you open Visual Studio 2015 (with Update 3) on a SharePoint 2016 developer machine, it may occurs that the SP 2016 templates are missing (it displays only SP 2010 and 2013 templates). In that case, don’t panic ! Just follow the following process :

  1. If you don't have a version of Office Developer Tools for Visual Studio 2015, download “Microsoft Office Developer Tools Preview 2 for Visual Studio 2015” with the following link : https://www.microsoft.com/en-us/download/details.aspx?id=51683  (don’t go to aka.ms/officedevtoolsforvs2015 , the link is broken)
  2. Install the Microsoft Office Developer Tools Preview 2 for Visual Studio 2015 on your machine
  3. Open Control Panel > Programs > Programs and Features
  4. Uninstall SharePoint Client Components (with the version number 16.0.xxx)
  5. Download the SharePoint Server 2016 Client Components SDK from www.microsoft.com/en-us/download/details.aspx?id=51679
  6. Start developing your successful SharePoint Addins !

Open XML SDK 2.7 for .NET Core release

For people who play a lot with Office documents, and as a SharePoint developer (app, migration tools, etc) this is a day as usual, the Open XML SDK is a powerful companion.

The latest update of this nice SDK was released a year ago with a great upgrade, thanks to Eric White which replaced the System.IO.Packaging implementation. Last week was released the official SDK 2.7 which now moved to using Windows Base and supports .NET Standard 1.3, so it now works with .NET Core and .NET CLI.

image

And you know what ?!? It works like a charm !

Here is a sample code to generate a Word Document from a .NET Core (as well as for any .NET app) :


using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;

namespace CoreTest
{
public class Program
{
public static void Main(string[] args)
{
GenerateHelloOOXMLDocument("test.docx");
}

public static void GenerateHelloOOXMLDocument(string docName)
{
using (WordprocessingDocument package =
WordprocessingDocument.Create(docName, WordprocessingDocumentType.Document))
{
package.AddMainDocumentPart();
package.MainDocumentPart.Document =
new Document(
new Body(
new Paragraph(
new Run(
new Text("Hello Open XML for .NET Core !")))));

package.MainDocumentPart.Document.Save();
}
}
}
}

and the project.json file :


{
"version": "1.0.0-*",
"buildOptions": {
"emitEntryPoint": true
},

"dependencies": {
"DocumentFormat.OpenXml": "3.0.0-*",
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.1"
}
},

"frameworks": {
"netcoreapp1.0": {
"imports": "dnxcore50"
}
}
}

Déployer un site ASP.NET Core dans un conteneur Nano Server

Avec l’arrivée de Windows Server 2016, les entreprises se voit maintenant dotées d’un nouveau type de conteneur : les conteneurs Windows (exécutant Windows Server Core et Nano Server). A l’instar des conteneurs Linux, les conteneurs Windows possèdent leurs propres images disponible sur le Docker Hub. L’agnosticité de Docker (peu importe le fournisseur ou la technologie sous-jacente) et les capacités multiplateforme de .NET Core vont nous permettre de migrer une application ASP.NET Core existante s’exécutant dans conteneur Linux (cf dernier post) vers Nano Server sous Windows Server 2016.

Migrer vers un conteneur Windows

Lors du dernier post sur le sujet, nous avions vu comment déployer une application ASP.NET MVC Core dans un conteneur Linux. Voici le Dockerfile (que j’ai nommé Dockerfile.nanoserver permettant d’avoir un Dockerfile par type de conteneur) permettant de déployer la même application dans un conteneur Windows :

FROM microsoft/dotnet:nanoserver
 
COPY . /app
WORKDIR /app
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]
 
EXPOSE 5000/tcp
ENTRYPOINT ["dotnet", "run", "--server.urls", http://*:5000]

Constat : la seule différence à ce fichier Dockerfile est l’image de base (microsoft/dotnet:nanoserver) qui spécifie que nous souhaitons utiliser l’image .NET Core sous Nano Server. C’est aussi simple que ça ! (pour une application .NET Core en tout cas).

En quelques étapes :

  • Exécuter la même commande de Build pour construire votre image : docker build –t <votre tag> –f Dockerfile.nanoserver .

image

  • Démarrer un conteneur avec la commande : docker run –d –p 5000:5000 <votre tag>
  • Ouvrez un navigateur web et naviguez vers votre conteneur : http://<ip de votre conteneur/serveur Windows Server 2016>:5000

Exécuter l’application dans un conteneur Hyper-V

Le conteneur Windows Hyper-V apporte une couche d’isolation et de sécurité supplémentaire à l’application. Le choix entre un conteneur Windows “simple” et un conteneur virtualisé Hyper-V se fera en fonction de vos besoins, ce dernier fournissant une isolation du kernel et une séparation entre le niveau/version des patchs de l’hôte et de l’application.

La ligne de commande est similaire, nous précisons simplement le niveau d’isolement :

  • Démarrer un conteneur avec la commande incluant le paramètres isolation : docker run –d –p 5000:5000 –isolation=hyperv <votre tag>
  • Ouvrez un navigateur web et naviguez vers votre conteneur : http://<ip de votre conteneur/serveur Windows Server 2016>:5000

Container everywhere !

L’introduction des conteneurs Windows avec l’arrivée de Windows Server 2016 annonce une adoption du conteneur encore plus importe que celle actuellement avec les conteneurs Linux : containarization d’applications anciennes ou déploiement d’applications IIS avec le .NET Framework (avec Windows Server Core), déploiement Apps/IIS/AD DS/Hyper-V/etc (avec Nano Server), etc. L’adage Docker “Build, Ship and Run any app, Everywhere” n’a jamais eu autant de sens !

Déployer un projet web ASP.NET Core 1.0 avec Docker sur Windows en 15 minutes

Venant tout juste de passer sous Windows 10 update November 2015 (prérequis pour Docker beta) et souhaitant tester la RC2 fraichement débarquée de .NET Core, je me suis dit qu’un petit post ne serait pas de trop pour prendre les (nouvelles) bonnes habitudes. Aussi voici comment faire court pour créer une application .NET Core :

Installation des prérequis

Pour créer un projet ASP.NET Core :

  • .NET Core SDK (en RC 2 lors de la rédaction de ce post) : https://go.microsoft.com/fwlink/?LinkID=798398
  • NodeJS et son gestionnaire de package NPM : https://nodejs.org
  • Docker pour Windows (si vous êtes sur Windows) ou Docker pour Mac (si vous êtes sur Mac) : https://beta.docker.com/ (l’utilisation de la Beta nécessite l’obtention d’une clef qui arrive au compte goutte en ce moment …). Vous devez également avoir une version de Windows 10 adéquate (avec Hyper-V installé … pourquoi ne l’auriez-vous pas installé d’ailleurs ?!?) et la mise à jour de Novembre 2015.

Création du projet ASP.NET Core

  1. Dans une invite de commande ou dans une console PowerShell :
    1. mkdir coreapp : création d’un répertoire racine pour le projet
    2. cd .\coreapp\
  2. Installation du générateur Yeoman ASP.NET pour créer une application ASP.NET Core (et non juste une application console avec la commande dotnet new)
    1. npm install –g yo : installation de Yeoman
    2. npm install –g generator-aspnet : installation du générateur ASP.NET Core de Yeoman
  3. Création du projet :
    1. yo aspnet : affiche un wizard pour créer un nouveau projet :
      image
  4. Dans le wizard :
    1. Sélectionnez Web Application > Boostrap
    2. Saisissez le nom de l’application
  5. Le générateur va se mettre au travail et récupérer pour vous toutes les dépendances du projet et les placer dans un répertoire du même nom que celui de votre projet.
  6. Nous avons un peu de modification à faire pour rendre notre application compatible avec Docker (et rendre accessible notre application  à l’extérieur du container).
    Ouvrez le fichier Program.cs dans votre éditeur préféré (Visual Studio Code ?)
    Modifiez le contenu pour avoir un contenu similaire à ce qui suit puis enregistrez vos modifications :

    using Microsoft.Extensions.Configuration;
    
    ...
    namespace AppCoreDocker
    {
     public class Program
     {
     public static void Main(string[] args)
     {
     var config = new ConfigurationBuilder()
     .AddEnvironmentVariables("")
     .Build();
     var url = config["ASPNETCORE_URLS"] ?? "http://*:5000";
     var env = config["ASPNETCORE_ENVIRONMENT"] ?? "Development";
     
     var host = new WebHostBuilder()
     .UseKestrel()
     .UseUrls(url)
     .UseEnvironment(env)
     .UseContentRoot(Directory.GetCurrentDirectory())
     .UseIISIntegration()
     .UseStartup&amp;lt;Startup&amp;gt;()
     .Build();
    
     host.Run();
     }
     }
    }
    

    Cette modification permet de spécifier à Kestrel d’écouter sur le port 5000 quel que soit l’adresse que nous lui fournissons (merci à Laurent qui m’a évité de perdre du temps). Vous remarquerez la nouveauté liée à la RC 2 de cette configuration.

  7. Une fois le projet générer, les étapes sont les mêmes que pour tout projet :
    1. cd <nom de votre projet>
    2. dotnet restore : restaure les packages Nuget de l’application
    3. dotnet build : compile le projet (se produira si vous faites un run également)
    4. dotnet ef database update : crée la base de données SQLite pour gérer l’authentification (démo uniquement)
    5. dotnet run : lance le serveur Kestrel sur l’URL http://localhost:5000

image

Ouvrez un navigateur web avec l'URL : http://localhost:5000

image

Déploiement avec Docker

Afin de pouvoir lancer votre application dans un container Docker, nous devons créé notre Dickerfile. Le générateur Yeoman vous a déjà généré ce fichier, néanmoins, pour le moment le template de Yeoman n'est pas à jour (notamment l’image de base qui n’est pas la bonne et les actions maintenant avec la commande dotnet au lieu de dnx - cela a été mis à jour dans Github mais pas dans les distributions npm lors de la rédaction de ce post) que vous devrez modifier afin d’avoir un Dockerfile similaire à :

FROM microsoft/dotnet

ENV ASPNETCORE_ENVIRONMENT= "Production"

COPY . /app
 WORKDIR /app
 RUN ["dotnet", "restore"]

EXPOSE 5000
ENTRYPOINT ["dotnet", "run"]

Une fois le fichier modifié, vous pouvez exécuter les commandes suivantes :

  1. docker build –t <votre tag> .
  2. docker run –d –p 5000:5000 <votre tag>

La première commande build crée l'image Docker en installant les dépendances. La commande run exécute un container avec l'image créée précédemment sur le port 5000.

Ouvrez un navigateur web avec l'URL suivante : http://docker:5000 (et non localhost)

image

 

Conclusion

Force est de constater que l’uniformisation de la chaîne de commandes .NET Core et la possibilité de réaliser ses containers Docker dans un environnement Windows (ou Mac) apporte un réel gain de temps et une uniformité des outils quelle que soit l'environnement de développement.

Néanmoins, je ne pourrais que trop vous conseiller de tester vos containers dans un environnement Docker Linux stable et ne pas oublier que pour le moment Docker for Windows est en Beta.

Microsoft Most Valuable Professional again … 10 ans !

image

C’est toujours avec beaucoup de plaisir que l’on reçoit le mail de renouvellement de notre titre MVP (Most Valuable Professional) de la part de Microsoft (merci Soyoung !). C’est donc pour la 10ème année consécutive que je suis renouvelé et reste donc dans la famille des 285 MVPs spécialistes SharePoint / Office 365 présents aux quatre coins du globe.

Ce renouvellement se fait selon la nouvelle catégorisation MVP (anciennement SharePoint Server) : Office Servers and Services (qui regroupe SharePoint et Office 365) et Visual Studio and Development Technologies pour moi cette année.

Plus d’infos sur le titre MVP : https://mvp.microsoft.com/fr-fr/Overview

A bientôt sur les prochains Afterworks autour d’une SharePint !

Découvrir Nano Server avec Azure

Vous souhaitez tester ou découvrir Nano Server ? Vous disposez d’un compte Azure ? Oui, alors vous n’avez plus d’excuse, cela ne devrait pas vous prendre plus de 5 minutes.

1. Connectez-vous sur le portail d’administration Azure (http://portal.azure.com)

2. Effectuer une recherche ‘Nano server’ dans les services Azure et vous devriez avoir un résultat similaire à celui-ci :

image

3. Cliquez dessus et en bas de page, cliquez sur Créer (mode classique ou Resource Manager, ce dernier étant à privilégier pour les nouvelles ressources)

image

image

4. Configurer la machine avec vos paramètres spécifiques. Pour une démonstration j’ai opté pour la tarification A0 De base ou Standard (cliquez sur Afficher tout en haut à droite si le mode de tarification n’est pas affiché). Evidemment, à dimensionner en fonction de vos besoins.

5. Une fois la machine virtuelle créée (ce qui ne devrait pas être long) et afin de pouvoir déployer un site ASP.NET (Core ou 4.5), vous devez ajouter un point de terminaison pour le port 80 (port privé 5004 dans mon cas) :

image

6. Il ne vous reste plus qu’à vous connecter à votre nouveau Nano Server via une session distante PowerShell (cf. ce post pour l’utilisation de New-PSSession).

SharePoint 2016 en version finale (RTM)

Ce jour marque l’annonce de la version finale (RTM – Release To Manufacturing) de SharePoint Server 2016 et de Project Server 2016. Cette version que l’on attendait bien évidemment pour ses nombreuses améliorations aussi bien pour les utilisateurs que les IT devrait donc être disponible très bientôt (surveillance sur MSDN quotidienne dès demain !).

L’une des caractéristiques importantes de SP2016 est sa capacité d’hybride Cloud/On Premises que j’aurais le plaisir de tester dans les prochaines semaines afin d’agrémenter ce blog.

Sinon en quelques lignes pour rappel, SharePoint Server 2016 c’est aussi :

- Des limitations repoussées : des millions de documents par bibliothèque, un index de 500 millions d’éléments par serveur d’application de recherche, 100 000 collections de sites par bases de données (x20 par rapport à SP2013), des bases de contenu de plusieurs Tera (au lieu de 200 Go), des affichages de listes importantes moins contraignantes (> 5000 éléments), une taille de fichier max jusqu’à 10 Go, etc.

- Déploiement : installation de la ferme par rôle (MinRole), Patching avec 0 downtime (appliqer une mise à jour ou un fix ne fera plus tomber dramatiquement votre SLA), la création de collections de sites ultra rapide (1 seconde avec l’utilisation de modèle), DLP (Data Loss Protection) pour la sécurité des données, etc.

sharepoint-2016-minroles

- L’occasion de découvrir ou redécouvrir : OneDrive for Business, Office Graph et Delve dans SharePoint, des espaces de collaboration connectés à O365, le nouveau menu de lancement d’App (extensible …), SharePoint Insight pour mieux surveiller votre ferme, des transferts de fichiers optimaux avec BITS (fiabilité, économie bande passante, performance), les permaliens (le lien reste le même, que vous renommiez ou déplaciez votre document), etc.

- Une expérience “Mobile first” : HTML 5 et le Responsive sont partout dans SharePoint 2016 …

Vous connaissez déjà le programme du prochain Afterworks@Nouméa

Afterworks @Nouméa le 16/03

11754255_10153536472584711_2915913600887533907_n

Pour cette première édition des Afterworks des communautés Microsoft @Nouméa en 2016, nous vous proposons d'échanger avec les acteurs locaux sur “DevOps et les containers” autour de deux sessions (de 20 minute, chacune ponctuée de démonstrations) :
- Introduction à DevOps et la containarization des applications avec Docker et Windows (Julien – aka myself)
- Hyper-V Container & Windows Nano Server (Sylver)

Le meeting aura lieu à la CCI de Nouméa, salle Guillemin, à partir de 18h.

Renommage des framework .NET Core

C’est en pleine rédaction d’un post sur ASP.NET 5 (avant de redémarrer ceux sur Docker et Nano Server) que Scott Hanselman choisit de nous annoncer que les noms des frameworks .NET Core que nous connaissions changent (cela devrait signifier que la sortie de la RTM devrait se faire très prochainement).

Voici la liste des mises à jour :

  • ASP.NET 5 => ASP.NET Core 1.0
  • .NET Core 5 => .NET Core 1.0
  • Entity Framework 7 => Entity Framework Core 1.0 / EF Core 1.0

ASP.NET Core 1.0

Cela est beaucoup plus cohérent que précédemment, aussi bien pour les clients que pour l’évolution des deux frameworks afin d’éviter toutes confusions entre les frameworks. En espérant que les librairies tierces joueront également le jeu de ce renommage, notamment celle qui ne supporte que ASP.NET Core et non ASP.NET 4.6 par exemple).

SharePoint 2016 atteint la Release Candidate

imageC’est dans ce billet que l’équipe SharePoint annonce la mise à disposition de la Release Candidate de SharePoint 2016. La RC indique que les fonctionnalités n’évolueront plus pour cette version 2016 et que les partenaires peuvent démarrer leur phase de tests intensifs du produit en vue d’un déploiement de la plateforme ou d’une migration.

Pour rappel, l’une des principales caractéristiques de cette version 2016 est l’intégration en profondeur du mode hybride Cloud avec Office 365. Cela permettra aux entreprises de tirer le meilleur partie des services en ligne O365 tout en gardant leur environnement installé sur leurs serveurs pour leurs besoins.

Pour les testeurs, la bonne nouvelle est que la RC est une mise à jour et par conséquent que vos environnement Beta 2 pourront être mis à jour vers la RC sans avoir à tout réinstaller/configurer (je n’ai pas encore testé, nous verrons si cela est concluant).

Il est important de noter que SharePoint Designer 2013 est la dernière version du produit, il n’y aura pas de SharePoint Designer 2016 avec cette version de SharePoint. SharePoint Designer 2013 continue d’être supporter par SharePoint 2016 et Office 365. Tous les workflows créés avec SPD 2013 seront supportés par SharePoint 2016 jusqu’en 2026 (fin du support de SharePoint 2016).

Concernant le support d’Infopath Forms Services, dont la présence dans SharePoint 2016 était longtemps resté dans l’ombre quant à sa continuité au sein du produit, sera bien de la partie dans cette version (et la question se pose à nouveau pour la prochaine version), . L’hébergement de ce service est supporté jusqu’à la fin du suport SharePoint 2016. Le support dans Office 365 continue lui aussi. De la même façon que pour SharePoint Designer 2013, il n’y aura plus de nouvelle version d’Infopath, Infopath 2013 étant la dernière en date.