Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

L’installation de Visual Studio 2017 est clairement en rupture avec le passé. Ceci est une bonne chose. Fini les heures interminables passées à patienter lors de l’installation.

Au final, Visual Studio est plus rapide à s’installer, puis à se lancer.

Oui, mais certains sont déçus de ce nouvel IDE qui retirerait tant de fonctionnalités. Il n’y aurait pas d’exportateur de classe, pas de Linq To SQL, pas d’outils pour Entity Framework….

… Vraiment ? Microsoft aurait osé nous retirer tout cela ?....

Bien sûr que non, les fonctionnalités sont bien présentes, il suffit juste de les installer.

Pour ne pas se rater, lors de l’installation, on peut commencer par regarder di côté droit de l’installer. Dans la section « Résumé »

install VS2017 01

Pour chaque élément sélectionné comme « Charge de travail », on peut choisir d’ajouter des fonctionnalités. Toutes ne sont pas cochées à défaut.

install VS2017 02

On peut par exemple retrouver le concepteur de classes qui manque tant à certain

install VS2017 03

L’onglet « Composant individuel » (qui est passé inaperçu pour beaucoup de monde). En cherchant bien, on retrouve Linq To SQL.

install VS2017 04

Et pour finir sur un gros Troll : Oui, ils ont même gardé Workflow Foundation

install VS2017 05

Depuis déjà plusieurs semaines, le package Nuget Microsoft.NETCore.UniversalWindowsPlatform est passé en version 5.3. Si vous tentez l’expérience d’upgrader vos projets UWP, vous vous rendrez vite compte que Visual Studio 2015 ne supporte pas cette version.

À la compilation, on obtiendra systématiquement des erreurs comme celles-ci :

UWP sur VS 2015

 

Pour faire court :

  • Si vous voulez continuer à travailler sur Visual Studio 2015, il faut rester sur une version 5.2.2 (il n’est pas cependant pas certain qu’il y aura une version 5.2.3…). Certaines autres librairies dépendantes de la version 5.3 ne pourront donc jamais être mises à jour ou ajoutées à vos projets.
  • Si vous avez Visual Studio 2017, migrez vers 5.3, et profitez du nouveau tooling.

Personnellement, je vous encourage à migrer vers 2017 dès aujourd’hui. L’effort à fournir aujourd’hui sera minimum et s’il y a un bug dans les versions 5.2 d’UWP, vous n’aurez pas à vous battre avec. Retarder la migration risque de vous contraindre à fournir beaucoup plus de travail dans le futur.

Voilant rendre un PC, le plus clean possible avant d’installer Visual Studio 2017, j’ai été confronté à un problème de désinstallation d’une preview du SDK de .net Core. L’installeur me demande un fichier qui n’est plus sur mon PC.

Étrangement, mon fichier de cette preview 2 est lié à un bug résolu via le ticket suivant : https://github.com/aspnet/Home/issues/1449

Il n’y est pas fait état de la Preview 2 du SDK, mais le problème est le même. Plusieurs versions du fichier ont été distribuées durant la preview. Il faut donc retrouver celui a servi à sa propre installation :

  • RC1 U1 shipped for Azure SDK 2.8 (1.0.11125.0)
  • RC1 U1 shipped for Visual Studio as part of an updated Web Developer Tools (1.0.20204.0)

Dans mon cas, il s’agissait du second.

En le téléchargeant, j’ai pu débloquer la désinstallation de mon SDK en Preview 2.

Uninstall .net Core 1 preview 2

Contrairement à ce que laisse croire une rumeur venue d’un autre âge, TFS n’a pas besoin de SQL Server Enterprise pour s’exécuter. Par contre, si la personne qui a installé pour la première fois le TFS de votre équipe a une l’idée d’utiliser un SQL Server Enterprise (ou Developer), vous pouvez avoir des problèmes pour migrer. Que ce soit pour un upgrade, ou un déplacement de base de données, votre TFS peut réclamer une édition Enterprise de SQL Server.

Le problème n’est pas nouveau et bien connu : Des fonctionnalités de l’édition Enterprise sont activées sur vos bases. Il suffit de les désactiver. Si vous vous documentez un peu, vous découvrirez que la fonctionnalité en question est la compression.

Tombant plus souvent que je ne le voudrais sur ce problème, j’ai codé il y a quelques années ce petit script SQL. Celui-ci parcourt la liste de vos bases de données et désactive la compression.

Quand on a beaucoup de collections, ce script est bien utile :

-- Déclarations
declare 
 @DataBase sysname

-- Crusor pour aller chercher les bases de données
declare databases_cursor cursor for
select db.name
from sys.databases as db
where db.name like 'tfs_%';

open databases_cursor

-- Passer à la base suivante
fetch next from databases_cursor into @DataBase

while @@FETCH_STATUS=0
begin
    -- Changement de propriétaire
    exec('exec [' + @DataBase + '].dbo.prc_EnablePrefixCompression @online = 0, @disable = 1');

    -- Passer à la base suivante
    fetch next from databases_cursor into @DataBase
end

close databases_cursor
deallocate databases_cursor

Note : Pensez à changer la clause « where db.name like 'tfs_%' » si vos bases de données ne sont pas préfixées par « tfs_ »

Fléau d’une époque que je pensais révolue.

Il y a quelque temps, je me suis retrouvé dans l’impasse avec SCVMM. Je ne pouvais plus entreprendre la moindre opération sur une VM. Celle-ci s’était bloquée lors de sa création. La console de System Center ne me permettant pas de supprimer la machine en question, j’ai utilisé PowerShell.

Dans un premier temps, pour retrouver ma VM, j’ai utilisé la commande Get-SCVirtualMachine. J’ai filtré son résultat en prenant pour critère le nom de ma VM (S2016CORE). Si on ajoute une sélection du statut, on obtient la sortie suivante.

SCVMM Supprimer machine bloquée 01

Une fois que je me suis assuré que ma requête me retournait bien ma VM en défaut, je l’ai utilisé en entrée de la commande Remove-SCVirtualMachine. J’ai aussi utilisé l’argument –Force pour ne pas faire dans la dentelle.

SCVMM Supprimer machine bloquée 02

Note : La même logique peut être utilisée pour effectuer d’autres opérations en masse.

 

Encore une fois, PowerShell a sauvé ma journée.

Utiliser le panel de Bootrap n’est pas forcément ce qu’il y a de plus trivial. Surtout, s’il faut le reproduire à plusieurs reprises dans une même page :

<div class="panel panel-default">
    <div class="panel-heading">
        <h3 class="panel-title">My title</h3>
    </div>
    <div class="panel-body">
    ...
    </div>
</div>

En .net MVC, heureusement il est possible d’écrire des Helpers pour cela. Certain auront peut-être la tentation de créer deux méthode façon script PHP :

@Html.BeginPanel("My title")
…
@Html.EndPanel()

Heureusement, un Helper peut être incrusté dans un block using. Ce qui rend son usage plus trivial :

@using(Html.BeginPanel("My title"))
{
    …
}

Pour arriver à cela, on ne doit maitriser quelques concepts simples :

  • Le block using a besoin d’une instance d’une classe implémentant l’interface IDisposable
  • Le constructeur de cette classe va écrire le début du code HTML utile.
  • La méthode Dispose de cette classe doit écrire les balises HTML fermantes utiles.
  • Pour écrire directement sur la vue MVC, il faut utiliser la méthode Write du contexte de la vue : htmlHelper.ViewContext.Writer.Write("…").

La première étape consiste donc à créer une classe disposable :

  • L’appel du constructeur va écrire le début du panel Bootstrap.
  • L’instance appelante de HtmlHelper est conservée pour permettre son usage dans le Dispose.
  • L’appel du Dispose va écrire les deux balises fermantes des Div ouvertes dans le constructeur.
/// <summary>
/// Panel bootstrap pouvant être utilisé dans un block using d'un vue MVC
/// </summary>
public sealed class MvcPanel : IDisposable
{
    private readonly HtmlHelper _htmlHelper;

    /// <summary>
    /// Constructeur
    /// </summary>
    /// <param name="htmlHelper"></param>
    /// <param name="title">Titre du panel</param>
    public MvcPanel(HtmlHelper htmlHelper, string title)
    {
        _htmlHelper = htmlHelper;

        // Création du container
        var container = new TagBuilder("div");
        container.AddCssClass("panel");
        container.AddCssClass("panel-default");

        // Création du container du header
        var headerContainer = new TagBuilder("div");
        headerContainer.AddCssClass("panel-heading");

        // Création du header
        var header = new TagBuilder("h3");
        header.AddCssClass("panel-title");
        header.InnerHtml = title;

        // Ajout du header à son container
        headerContainer.InnerHtml = header.ToString();

        // Création du container du body
        var bodyContainer = new TagBuilder("div");
        bodyContainer.AddCssClass("panel-body");

        _htmlHelper.ViewContext.Writer.Write(
            String.Concat(
                container.ToString(TagRenderMode.StartTag),
                headerContainer.ToString(),
                bodyContainer.ToString(TagRenderMode.StartTag)));
    }

    /// <summary>
    /// Dispose, met fin au block
    /// </summary>
    public void Dispose()
    {
        _htmlHelper.ViewContext.Writer.Write("</div></div>");
    }
}

Après cela, l’écriture du Helper est triviale. Celui-ci a uniquement pour vocation de retourner une instance de la classe MvcPanel :

public static class PanelExtensions
{
    /// <summary>
    /// Création d'une Panel bootstrap à utiliser dans un block using
    /// </summary>
    /// <param name="htmlHelper">Helper</param>
    /// <param name="title">titre affiché sur le panel</param>
    /// <returns></returns>
    public static MvcPanel BeginPanel(this HtmlHelper htmlHelper, string title)
    {
        return new Html.MvcPanel(htmlHelper, title);
    }
}

Simple et trivial ;)

Par défaut dans IIS, un pool applicatif est recyclé toutes les 29 heures (et quand le serveur reboot). Cette valeur permet que ce recyclage ne se produise pas toujours à la même heure. Ce recyclage peut cependant poser problèmes s’il se produit alors que vos utilisateurs ont un usage intensif du site web associé.

Pour éviter les problèmes, certains administrateurs et/ou développeurs désactivent le recyclage du pool.

Malheureusement cette action peut provoquer d’autres désagréments. Les ressources n’étant jamais libérées, on peut avoir :

  • Des verrous sur des fichiers.
  • Des connexions à des bases de données qui ne se ferment jamais.
  • Un usage de la RAM supérieur à qu’il devrait être.
  • Des fuites de mémoires.
  • ... etc …

De manière générale, une application web peut aussi :

  • Contenir des bugs.
  • Nécessiter des optimisations (que vous n’avez pas le temps de planifier).
  • Utiliser de nombreuses variables statiques (certaines ont peut-être besoin d’être réhydratées périodiquement ?).

Le recyclage du pool peut justement éviter les problèmes liés aux ressources, et vous aider le temps que vous résolviez les erreurs de jeunesse de vos applications web.

Heureusement, IIS offre la possibilité de contrôler quand le pool est recyclé. Comme de coutume sur IIS, il faut passer par la liste des pools. Un clic droit sur le pool à configurer permet de sélectionner les paramètres avancés du pool.

clip_image001

Note : Attention à ne pas sélectionner la seconde option présente dans ce menu. Celle-ci permet de fixer des valeurs par défaut pour tous les pools du serveur. Ces valeurs ne seront appliquées qu’aux pools dont les paramètres n’ont pas été changés manuellement.

 

Via les paramètres du pool on peut mettre à 0 le paramètre « Intervalle de temps régulier (minutes) » pour désactiver le recyclage par défaut (1740 minutes étant égal à 29 heures). On peut ensuite utiliser le bouton « … » qui apparait quand on sélectionne la ligne « heures spécifiques ». Ceci va ouvrir le formulaire pour choisir les heures de recyclage.

clip_image002

 

On peut alors utiliser les boutons « Ajouter » et « Supprimer » pour définir des heures de recyclages.

clip_image003

 

Après validation de ce formulaire et du précédent, les paramètres sont appliqués au pool. Celui-ci sera alors recyclé à heures fixes.

Ensuite, pour éviter le problème de démarrage à froid de l’application web, on peut utiliser les options de démarrage automatique fournies par IIS.

Simple, facile et efficace ;)

Note : Cette option est disponible sur toutes les versions de IIS en service actuellement. Windows 2003 R2 et ces prédécesseurs n’étant plus à utiliser aujourd’hui, je n’ai pas monté de VM pour faire le test.

Visual-Studio-2017-400x400Comme il est de coutume en cette période de l’année, je vous souhaite une bonne année, et surtout un bon Visual Studio 2017. Vu la dernière RC, je ne m’inquiète pas, il sera bon !

Elle est bien loin cette année 2000, où tout le monde prédisait la fin du monde. A cette époque Microsoft parlait de créer le Framework .net. La presse spécialisée n’y croyait pas, cela n’allait pas marcher, C++ allait progressivement disparaître au profit de Java EE qui allait tous les dominer. Windows était le grand méchant loup qui n’allait jamais supporter le moindre standard industriel, et encore moins Linux.

Aujourd’hui les choses ont bien changé. Le Framework .net va bientôt avoir 17ans, il est plus que mature a fait des petits. Je pense à sa variante Open Source et les divers projets Open qui vont avec. De son côté Java s’est vu mettre un pied dans la tombe par Oracle (qui l’aurait cru à l’époque) et est aujourd’hui critiqué par Gartner. C++ se porte toujours bien et l’ami PHP aussi. Windows se porte sur de plus en plus de devises et embarque même un Shell Linux.

Nul doute que cette année encore beaucoup de choses vont changer ;)

A force de passer d'un projet à un autre, il y a toujours un moment où l'on tombe sur ce code que personne ne veut maintenir. Si ! Vous savez, celui qui est là mais que personne ne veut voir car « ça marche bien comme ça! », et « si on y touche, cela ne fonctionne plus ».

Dernièrement, je suis tombé sur l'un de ces codes. Une vue MVC doit être modifiée car une erreur de script se produit de manière imprévisible une fois sur six. Le contexte de l'erreur n'arrive pas à être reproduit. A la première lecture, je suis surpris par le nombre de balises « script » utilisées. Me vient alors l'idée folle de faire la recherche de « text/javascript » dans la page.

Ce qui donne le nombre magique de 23 ! A ce moment, je comprends mieux pourquoi la page est difficile à corriger. Si l'on en avait eu 42, on avait la réponse universelle à tous les problèmes.

« Noooon !!!! Mais pourquoi est-il aussi méchant ???… Parce que ! »

Après regroupement des scripts, j'ai pu facilement constater :

  • Qu'aucune méthode n'attentait que la page ne soit totalement chargée pour se lancer.
  • Qu'il y avait une bonne dizaine d'évènements capturés par ces scripts.
  • Certaines méthodes utilisant des services étaient lancées à la suite les uns des autres, au petit bonheur la chance, alors quelles étaient dépendantes les unes des autres.
  • Des variables déclarées globalement et portant le même nom étaient parfois utilisées par les mauvaises méthodes.

J'ai aussi été en mesure de saisir l'utilité des scripts et de revoir leur orchestration. Petit bonus, le poids de la page a été réduit. En plus, le code peut même être extrait vers un fichier .js pour être minifié.

Moralité ? Pour faciliter la lecture de vos scripts, pensez à les regrouper. Vous y gagnerez :

  • Lisibilité accrue.
  • Gestion des évènements plus claire.
  • Maintenance et évolutivité simplifiée.
  • Poids de la page réduit.

Voici deux nouveautés de la version Core de Windows Server 2016 qui ne raviront pas tout le monde :

  • Il n'est plus possible de passer d'une version Core à une version avec interface graphique.
  • Il n'est plus possible d'installer les consoles sur un server Core.

Ils s'agissaient pourtant de possibilités bien sympathiques introduites par Windows Server 2012 (voir mon billet à ce sujet ici). Lors de la mise à disputions de la RTM de 2016, la nouvelle m'avait désagréablement surpris. Ces possibilités permettaient de s'initier à Core sans pour autant finir bloqué par ces limitations. Maintenant, il faudra donc vérifier la compatibilité de vos outils avant de choisir de procéder à un déploiement de type Core. A noter, qu'aujourd'hui la plupart des features de Windows Server fonctionnent sur Windows Core.

Avec le recul, on peut très bien vivre sans. Si l'on utilise SCVMM, il faut avouer que le fais d'ouvrir une session sur certain serveurs devient totalement inutile.

Par exemple, pour mon Lab personnel, j'ai plusieurs serveurs sur lesquels je n'ai jamais ouvert de sessions (que ce soit pour l'installation ou la configuration de features : AD, DNS, DHCP, WSUS).

 

Lien vers la documentation : https://technet.microsoft.com/en-us/windows-server-docs/get-started/getting-started-with-server-with-desktop-experience

Si vous avez activé les fonctionnalités «Server Essentials» de Windows Server 2016 et autorisé l’accès distant, celui-ci peut ne pas fonctionner normalement. Il est possible que le site d’accès distant ne soit pas bien configuré. En lieu et place de celui-ci, vous pouvez vous retrouver avec la page d’accueil par défaut de IIS 10.

clip_image002

Si l’on ouvre la console IIS et que l’on demande à explorer le répertoire du site, on peut trouver ceci :

clip_image003

On est bien loin de ce que devrait contenir ce répertoire :

clip_image004

Le problème vient du fait, que le site ne pointe pas vers le bon répertoire. Pour corriger cela, il faut modifier le répertoire du site (propriété de base du site) pour le faire pointer vers « C:\Program Files\Windows Server\WebApps\Site » :

clip_image005

Après modification de la configuration, le site est disponible :

clip_image007

Bonne nouvelle pour les abonnés MSDN : TFS 2017 est disponible au téléchargement ;)

Bonne migration !

En temps normal, il n’y a rien de particulier à faire pour qu’une application UWP soit localisée. On ajoute les ressources, et Visual Studio trouve de lui-même les langues utilisables.

Ceci est défini via la section Resources du fichier Package.appxmanifest :

<Resources>
    <Resource Language="x-generate" />
</Resources>

Mais si Visual Studio n’arrive pas à déterminer les langues utilisées, on peut avoir plusieurs difficultés :

- Vous avez localisé une application et vos utilisateurs ne peuvent utiliser que la langue par défaut.

- Lors de la publication, le Store ne vous propose pas de renseigner toutes les langues contenues dans l’application.

Cette situation peut se produire si on a placé nos ressources dans un projet d’assembly dédié de type Portable Class Library. Dans ce cas de figure, il faut lister les ressources que l’on utilise dans le fichier Package.appxmanifest

Ex :

<Resources>
    <Resource Language="en-US" />
    <Resource Language="fr-Fr" />
    <Resource Language="it-It" />
</Resources>

Ceci n’est pas forcément très joyeux à faire, mais cela résout le problème.

Lors de la connexion d’un client à un Windows Server Essentials 2016, il existe a une erreur qui n’est pas documentée :

« Impossible de se connecter au serveur. Le serveur n’est pas disponible ».

Lors de mes tests, j’ai repris la liste des opérations que j’avais planifiées pour ma migration vers Windows Server 2016. C’est alors que je me suis rendu compte que j’avais rétrogradé le contrôleur principal de domaine qui était en service lors de l’installation des features Windows Server Essentials.

Si on regarde du côté des paramètres Windows Server Essentials, on peut constater qu’il existe une section : « Contrôleur de domaine désigné ». Si ce paramètre n’est pas bon, aucun client ne peut être ajouté au serveur.

clip_image001

Pour le changer, il suffit d’utiliser le bouton « Modifier », puis de choisir un serveur dans la liste de ceux qui sont disponibles.

clip_image002

Comme sur 2012 R2, sur Windows Server 2016, pour changer la langue d’un server core, il faut passer par PowerShell.

Toutes les langues n’étant pas installées par défaut, on doit commencer par installer la langue voulue : New-WinUserLanguageList fr-fr

clip_image002

Puis la définir comme étant la langue à utiliser : Set- WinUserLanguageList fr-fr

clip_image004

On peut aussi passer par "control int.cpl" pour changer les options de localisation et de globalisation.

En voulant upgrader un hôte Hyper-V de Windows 2012 R2 à 2016, j'ai eu une petite surprise : Les configurations NIC Teaming doivent être supprimées avant l'upgrade et reconstruites après.

Si en plus vous avez la chance d'utiliser cette fonctionnalité avec des switchs managés, il faudra planifier quelques manipulations supplémentaires avant de passer à Windows Server 2016.

clip_image002

Bonnes migrations à vous ;)

Lors des Microsoft Expériences, j’ai eu l’opportunité de présenter avec Pierrick un talk très sympathique sur l’accessibilité : Tout pour mijoter de belles applications UWP accessibles à tous et partout

Comme promis, voici les slides que nous avions présenté Pierrick et moi : https://1drv.ms/p/s!AmH_MyeRP0S6m89eo3Mltck8lPOg0g

clip_image002 Je souhaitais vous faire part de ma joie de recevoir un nouveau MVP Award. Comme tous les ans, je l’annonce avec un peu de retard. Octobre étant toujours un mois très chargé pour moi.

Cette année, je suis passé de l’expertise "Microsoft Azure" à "Visual Studio and Development Technologies".

Merci à Microsoft pour cet honneur, et un

Microsoft Store Services SDK est le nouveau nom du SDK dédié à la monétisation d'applications UWP. Depuis son passage à la version 10.0.0, de gros changements sont à noter :

  • Fin du support Windows 8.1, ce SDK est orienté UWP à 100%.
  • Fin du AdMediatorControl (il faut utiliser le AdControl, la médiation se faisant côté serveur)
  • Il n'est plus utile de télécharger les packages NuGet des annonceurs.
  • Il n'y a plus de configuration des annonceurs dans l'application.
  • Le AdControl est une classe sealed (donc l'héritage est impossible… sniff).
  • Changements de namespaces.
  • Les events du AdControl ne sont pas les mêmes que ceux du AdmediatorControl.

Si comme moi vous aviez codé une classe partagée entre Windows 8.1 et 10 qui héritait du AdMediatorControl, il va falloir revoir votre code en profondeur. Pour les autres, quelques changements de namespace et d'events devraient suffire.

Côté Windows 8.1 : on peut rester sur la version 2.0.8 du Microsoft Advertising SDK for Windows and Windows Phone 8.x (ceci sans changer son code). Ce SDK peut aussi être utilisé pour passer au AdControl. À l'avenir, ce SDK n'évoluera plus. Seules des correctifs se sécurité pourront être apportés.

Bonne mise à jour ;)

Suite à l'update 3 de Visual Studio 2015, Universal Windows Platform est passée en version 5.2. Version qui a le très désagréable inconvénient de ne pas respecter toutes les règles du store, et qui peut provoquer un rejet lors de la publication d'un package.

Le store indique une erreur 1300 (conformément à la capture suivante). Et la documentions sur cette erreur, n'est pas très épaisse… On nous dit juste de préparer un nouveau package avec Visual Studio. A la seconde tentative qui échoue, on peut laisser tomber.

Le sujet à déjà pas mal animé les forums :

https://social.msdn.microsoft.com/Forums/en-US/6cecb739-f41c-4449-9182-54c40e067652/uwp-submission-failed-with-error-code-1300-and-no-appxsym-file-inside-appxupload-package?forum=wpdevelop

https://social.msdn.microsoft.com/Forums/en-US/e766a904-7346-4f76-bad2-852d3b301b0e/known-issue-version-52-of-microsoftnetcoreuniversalwindowsplatform-delisted-all?forum=Win10SDKToolsIssues

Des issues en rapport ont été créées sur GitHub.

https://github.com/dotnet/corefx/issues/9711

https://github.com/dotnet/corefx/issues/9743

 

Si vous avez mis à jour une application UWP cette semaine, une seule solution s'offre à vous pour le moment : revenir à UWP 5.1.

Pour cela, il suffit de lancer la gestion de package NuGet et de sélectionner ses projets et de demander l'installation de la version 5.1.0 (liste version, on sélectionne 5.1.0 et on click sur Install)

La UWP 5.2 a été retirée temporairement, il n'y a donc pas à craindre pour la suite qu'elle revienne avec ces méchants bugs.

Plus de Messages Page suivante »


Les 10 derniers blogs postés

- Les pièges de l’installation de Visual Studio 2017 par Blog de Jérémy Jeanson le il y a 5 heures et 9 minutes

- UWP or not UWP sur Visual Studio 2015 ? par Blog de Jérémy Jeanson le 03-08-2017, 19:12

- Désinstallation de .net Core RC1 Update 1 ou SDK de Core 1 Preview 2 par Blog de Jérémy Jeanson le 03-07-2017, 19:29

- Office 365: Ajouter un utilisateur ou groupe dans la liste des Site collection Administrator d’un site SharePoint Online via PowerShell et CSOM par Blog Technique de Romelard Fabrice le 02-24-2017, 18:52

- Office 365: Comment créer une document library qui utilise les ContentTypeHub avec PowerShell et CSOM par Blog Technique de Romelard Fabrice le 02-22-2017, 17:06

- [TFS] Supprimer en masse les dépendances à SQL Enterprise ou Developer avant de procéder à une migration par Blog de Jérémy Jeanson le 02-20-2017, 20:30

- Office 365: Attention au volume utilisé par les fichiers de Thèmes de SharePoint Online par Blog Technique de Romelard Fabrice le 02-07-2017, 18:19

- [SCVMM] Supprimer une machine bloquée par Blog de Jérémy Jeanson le 01-31-2017, 21:22

- Microsoft .Net Challenge 2017 par Le Blog (Vert) d'Arnaud JUND le 01-30-2017, 15:25

- Office 365: Utiliser le bouton Export to Excel depuis un teamsite SharePoint Online et avec le client Office 2007 par Blog Technique de Romelard Fabrice le 01-27-2017, 18:58