<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le blog de Hinault Romaric Donfack &#187; Nuget</title>
	<atom:link href="https://blog.developpez.com/lilroma/pcategory/net/nuget/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/lilroma</link>
	<description>Bienvenue sur ce blog. Vous y trouverez du .NET, du .NET...  encore du .NET, toujours du .NET et très peu de chose sur moi</description>
	<lastBuildDate>Sat, 27 Aug 2016 14:24:30 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>[Tutoriel]Création d’une application CRUD avec WebMatrix, Razor et Entity Framework</title>
		<link>https://blog.developpez.com/lilroma/p11023/net/tutoriel_creation_d_une_application_crud</link>
		<comments>https://blog.developpez.com/lilroma/p11023/net/tutoriel_creation_d_une_application_crud#comments</comments>
		<pubDate>Mon, 14 May 2012 10:00:56 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Salut, Les cinq articles de blog qui présentaient pas à pas comment créer une application CRUD avec WebMatrix, Razor et Entity Framework ont été regroupés en un seul tutoriel qui vient d’être publié sur Developpez.com. J&#8217;ai eu à développer récemment &#8230; <a href="https://blog.developpez.com/lilroma/p11023/net/tutoriel_creation_d_une_application_crud">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Salut,</p>
<p> Les cinq articles de blog qui présentaient pas à pas comment créer une application CRUD avec WebMatrix, Razor et Entity Framework ont été regroupés en un seul tutoriel qui vient d’être publié sur Developpez.com.</p>
<blockquote><p>J&rsquo;ai eu à développer récemment une application CRUD avec WebMatrix. Utilisant principalement la classe DataBase de l&rsquo;espace de nom Microsoft.Data pour la manipulation des données, lorsque j&rsquo;ai aperçu Entity Framework dans les packages NuGet avec WebMatrix 2 bêta, je me suis dit &laquo;&nbsp;génial&nbsp;&raquo; ! Ça veut dire que je peux l&rsquo;utiliser dans ma solution.</p>
<p>J&rsquo;ai donc opté pour l&rsquo;utilisation de la bibliothèque au sein de mon application WebMatrix. Entity Framework est en passe de devenir un standard pour la manipulation des données et est recommandé par Microsoft.</p>
<p>Contrairement à Visual Studio et ASP.NET ou l&rsquo;on dispose de plusieurs outils rendant facile la conception d&rsquo;une application CRUD avec Entity Framework, sur WebMatrix, c&rsquo;est un peu compliqué et l&rsquo;on ne dispose pas des fonctionnalités comme l&rsquo;échafaudage, et encore moins des ressources sur Internet.</p>
<p>C&rsquo;est pourquoi j&rsquo;ai décidé de fournir au travers de cet article une démarche pas à pas avec autant de détails que possible pour la conception d&rsquo;une application CRUD avec WebMatrix, Razor et Entity Framework.</p>
<p>Le lecteur, tout au long de ce tutoriel, pourra se familiariser avec WebMatrix, Razor, Entity Framework, le gestionnaire de packages open source .NET NuGet pour WebMatrix et le gestionnaire de base de données SQL Server Compact Edition.</p>
<p>Cet article est essentiellement destiné aux débutants. Aucun prérequis n&rsquo;est donc nécessaire pour sa bonne compréhension. Il est néanmoins préférable d&rsquo;avoir des connaissances de base en programmation orientée objet avec C# et d&rsquo;être familiarisé avec WebMatrix et Razor. Si ce n&rsquo;est pas le cas, je vous conseille de lire dans un premier temps mon tutoriel de présentation de WebMatrix, ainsi que mon tutoriel sur Razor.</p></blockquote>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/">Consulter le tutoriel complet</a></p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/webmatrixcrudapp.pdf">Télécharger la version PDF</a></p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/webmatrixcrudapp.zip">Télécharger la version hors-ligne</a></p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/webmatrixcrudapp-ebooks.zip">Télécharger la version eBook</a></p>
<p> &#8211; Télécharger le code source de l&rsquo;application d&rsquo;exemple :</p>
<p>          . <img src="http://www.developpez.be/images/kitsrc.jpg" alt="" title="" /> <a href="ftp://ftp-developpez.com/rdonfack/WebMatrixCrudApp.rar">Version RAR</a></p>
<p>          . <img src="http://www.developpez.be/images/kitsrc.jpg" alt="" title="" /> <a href="ftp://ftp-developpez.com/rdonfack/WebMatrixCrudApp.zip">Version ZIP</a></p>
<p>&#8211; <a href="http://www.developpez.net/forums/showthread.php?t=1214877">Pour les commentaires c&rsquo;est par ici </a></p>
<p><strong>Bonne lecture</strong> <img src="https://blog.developpez.com/lilroma/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Création d’une application CRUD avec WebMatrix, Razor et Entity Framework Part 4 : Implémentation des fonctionnalités CRUD</title>
		<link>https://blog.developpez.com/lilroma/p10980/net/creation_d_une_application_crud_avec_web_3</link>
		<comments>https://blog.developpez.com/lilroma/p10980/net/creation_d_une_application_crud_avec_web_3#comments</comments>
		<pubDate>Wed, 25 Apr 2012 10:51:38 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[WebMatrix]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&#8217;une application CRUD avec WebMatrix, Razor et Entity Framework. &#8211; Part 1 : introduction et présentation des outils &#8211; Part 2 : création de l&#8217;application &#8230; <a href="https://blog.developpez.com/lilroma/p10980/net/creation_d_une_application_crud_avec_web_3">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&rsquo;une application CRUD avec WebMatrix, Razor et Entity Framework.</p>
<p>&#8211; Part 1 : <a href="http://blog.developpez.com/lilroma/p10870/">introduction et présentation des outils</a></p>
<p>&#8211; Part 2 : <a href="http://blog.developpez.com/lilroma/p10876/">création de l&rsquo;application et définition du modèle objet</a></p>
<p>&#8211; Part 3 : <a href="http://blog.developpez.com/lilroma/p10896/">création du DBContex et du Repository</a></p>
<p>Dans les parties précédentes, nous nous sommes familiarisés avec outils utilisés, nous avons procédé à la création de l’application, à la définition du modèle objet qui sera utilisé ainsi qu&rsquo;à la création du DBContex et du Repository.</p>
<p>Dans cette partie, nous allons nous plonger dans le vif du sujet en implémentant les interfaces Web pour la lecture, la modification, la suppression et l&rsquo;enregistrement des données dans votre base de données.</p>
<p><span id="more-56"></span></p>
<p>Vous allez dans un premier temps créé un nouveau dossier Personne qui contiendra tous les fichiers pour la gestion des personnes.</p>
<p><strong>1 &#8211; Implémentation de la grille des données</strong></p>
<p>Dans le dossier Personne, ajoutez un nouveau fichier Index.cshtml.</p>
<p>Vous allez ensuite ajouter en début de ce fichier les lignes de code permettant de retourner la liste des personnes qui sont enregistrées dans la base de données. Cette liste sera par la suite affichée grâce au Helper Razor WebGrid, qui va être instancié en passant en paramètre la collection des données qui doivent être affichées et le nombre d&rsquo;éléments sur une page.</p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><br />var pr = <span style="color: #0000ff">new</span> PersonneRepository();<br />var grid = <span style="color: #0000ff">new</span> WebGrid(pr.GetAll(),rowsPerPage : 10);</pre>
<p></div>
<p>Avant d&rsquo;afficher la grille, vous allez procéder au formatage de celle-ci en définissant les colonnes qui seront affichées et en ajoutant notamment de nouvelles colonnes pour l&rsquo;édition, la consultation et la suppression d&rsquo;une ligne de la grille.</p>
<p>Le code pour effectuer cela est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@grid.GetHtml(tableStyle:<span style="color: #006080">&quot;grid&quot;</span>,<br />  headerStyle:<span style="color: #006080">&quot;head&quot;</span>,<br />    alternatingRowStyle: <span style="color: #006080">&quot;altrow&quot;</span>,<br />         columns: grid.Columns(<br />          grid.Column(<span style="color: #006080">&quot;Nom&quot;</span>,<span style="color: #006080">&quot;Nom&quot;</span>),<br />             grid.Column(<span style="color: #006080">&quot;Prenom&quot;</span>, <span style="color: #006080">&quot;Prénom&quot;</span>),<br />                grid.Column(<span style="color: #006080">&quot;&quot;</span>, <span style="color: #006080">&quot;&quot;</span>, format: @&lt;text&gt;&lt;a href=<span style="color: #006080">&quot;Edit/@item.PersonneId&quot;</span>)&gt;Editer&lt;/a&gt; <br />                       | &lt;a href=<span style="color: #006080">&quot;Details/@item.PersonneId&quot;</span>)&gt;Détails&lt;/a&gt; <br />                         | &lt;a href=<span style="color: #006080">&quot;Delete/@item.PersonneId&quot;</span>)&gt;Supprimer&lt;/a&gt;&lt;/text&gt;)                                                                                     <br />                )<br />        <br />        )</pre>
<p></div>
<p>Le code complet de la page Index.cshtml est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 1200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@{<br />    <span style="color: #008000">// Set the layout page and page title</span><br />    Layout = <span style="color: #006080">&quot;~/_SiteLayout.cshtml&quot;</span>;<br />    Page.Title = <span style="color: #006080">&quot;Register an Account&quot;</span>;<br /><br />    var pr = <span style="color: #0000ff">new</span> PersonneRepository();<br />    var grid = <span style="color: #0000ff">new</span> WebGrid(pr.GetAll(),rowsPerPage : 10);<br />                  <br />}    <br />&lt;hgroup <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;title&quot;</span>&gt;<br />    &lt;h1&gt;Personnes.&lt;/h1&gt;<br />&lt;/hgroup&gt;  <br /><br />&lt;p&gt;&lt;a href=<span style="color: #006080">&quot;Create&quot;</span>&gt;Ajouter un nouvel enregistrement&lt;/a&gt;&lt;/p&gt;<br />        <br />   @grid.GetHtml(tableStyle:<span style="color: #006080">&quot;grid&quot;</span>,<br />        headerStyle:<span style="color: #006080">&quot;head&quot;</span>,<br />        alternatingRowStyle: <span style="color: #006080">&quot;altrow&quot;</span>,<br />                columns: grid.Columns(<br />                    grid.Column(<span style="color: #006080">&quot;Nom&quot;</span>,<span style="color: #006080">&quot;Nom&quot;</span>),<br />                      grid.Column(<span style="color: #006080">&quot;Prenom&quot;</span>, <span style="color: #006080">&quot;Prénom&quot;</span>),<br />                        grid.Column(<span style="color: #006080">&quot;&quot;</span>, <span style="color: #006080">&quot;&quot;</span>, format: @&lt;text&gt;&lt;a href=<span style="color: #006080">&quot;Edit/@item.PersonneId&quot;</span>)&gt;Editer&lt;/a&gt; <br />                              | &lt;a href=<span style="color: #006080">&quot;Details/@item.PersonneId&quot;</span>)&gt;Détails&lt;/a&gt; <br />                              | &lt;a href=<span style="color: #006080">&quot;Delete/@item.PersonneId&quot;</span>)&gt;Supprimer&lt;/a&gt;&lt;/text&gt;)                                                                                     <br />                )<br />        <br />        )</pre>
<p></div>
<p>La ligne de code :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><br />&lt;p&gt;&lt;a href=<span style="color: #006080;">"Create"</span>&gt;Ajouter un nouvel enregistrement&lt;/a&gt;&lt;/p&gt;</pre>
<p></div>
<p>va permettre d&rsquo;ajouter les nouvelles informations sur une personne dans la BD. À l&rsquo;exécution, vous obtenez le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/ListePersonnes.PNG" alt="" title="" /></p>
<p>le code CSS que j&rsquo;ai utilisé pour le WebGrid et qui a été défini dans le fichier Site.css pour être appliqué à toutes les grilles de l&rsquo;application est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">.grid { margin: 4px; border-collapse: collapse; width: 600px; }<br /> .head { background-color: #E8E8E8; font-weight: bold; color: #FFF; }<br /> .grid th, .grid td { border: 1px solid #C0C0C0; padding: 5px; }<br /> .altrow { background-color: #E8E8E8; color: #000; }</pre>
<p></div>
<p><strong>2 &#8211; Affichage détaillé </strong></p>
<p>mpte tenu du fait que dans certains cas, il vous sera impossible de présenter toutes les informations sur une entité sur une ligne de la grille, un lien qui pointe sur une page &nbsp;&raquo; Details &nbsp;&raquo; a été introduit donc pour afficher des informations détaillées sur une personne.</p>
<p>Nous verrons ici comment implémenter l&rsquo;interface Web de cette page. Pour cela, vous allez ajouter un nouveau fichier Edit.cshtml dans le dossier Personne.</p>
<p>Au début de ce fichier, vous allez déclarer une variable pour récupérer l&rsquo;id qui est passé comme paramètre HTTP. La méthode Find() sera utilisée pour retourner l&rsquo;élément dans la base de données dont l&rsquo;identifiant est égal à celui qui est passé en paramètre.</p>
<p>Le code pour effectuer cela est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">int</span> id = Request[<span style="color: #006080;">"id"</span>].AsInt();<br />    var pr = <span style="color: #0000ff;">new</span> PersonneRepository();<br />    var personne = <span style="color: #0000ff;">new</span> Personne();<br />    personne = pr.Find(id);</pre>
<p></div>
<p>Il ne vous reste plus qu&rsquo;à afficher les informations contenues dans la variable personne dans votre code html.</p>
<p>Le code complet de la page Details.cshtml est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 800px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><br />@{<br />    <span style="color: #008000">// Set the layout page and page title</span><br />    Layout = <span style="color: #006080">&quot;~/_SiteLayout.cshtml&quot;</span>;<br />    Page.Title = <span style="color: #006080">&quot;Détails&quot;</span>;<br />   <br />    <span style="color: #0000ff">int</span> id = Request[<span style="color: #006080">&quot;id&quot;</span>].AsInt();<br />    var pr = <span style="color: #0000ff">new</span> PersonneRepository();<br />    var personne = <span style="color: #0000ff">new</span> Personne();<br />    personne = pr.Find(id);<br />                  <br />}    <br />&lt;hgroup <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;title&quot;</span>&gt;<br />    &lt;h1&gt;Détails.&lt;/h1&gt;<br />&lt;/hgroup&gt;  <br /> &lt;fieldset&gt;<br />        &lt;legend&gt;&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;nom&quot;</span>&gt;<br />                &lt;label&gt;Nom:&lt;/label&gt;<br />                &lt;label&gt;@personne.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;prenom&quot;</span>&gt;<br />                &lt;label&gt;Prénom:&lt;/label&gt;<br />                &lt;label&gt;@personne.Prenom&lt;/label&gt;<br />            &lt;/li&gt;<br />        &lt;/ol&gt; <br />    &lt;/fieldset&gt;<br /><br />&lt;p&gt;&lt;a href=<span style="color: #006080">&quot;Edit?id=@id&quot;</span>&gt;Editer&lt;/a&gt; |<br /> &lt;a href=<span style="color: #006080">&quot;Index&quot;</span>&gt;Retour à la liste&lt;/a&gt;<br />&lt;/p&gt;</pre>
<p></div>
<p>Ce qui permet d&rsquo;obtenir le résultat suivant à l&rsquo;exécution, après un clic sur le lien Détails d&rsquo;une ligne de la grille contenant la liste des personnes :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/detailspersonne.PNG" alt="" title="" /></p>
<p><strong>3 &#8211; Enregistrement des données</strong></p>
<p>Dans la page affichant la liste des personnes, vous avez ajouté un lien permettant d&rsquo;accéder à la page d&rsquo;ajout d&rsquo;un nouvel enregistrement. Penchons-nous maintenant sur l&rsquo;implémentation de cette page. Vous allez ajouter une nouvelle page dans le dossier Personne. Il suffit pour cela de faire un clic droit sur le dossier Personne, sélectionner &nbsp;&raquo; New Files &nbsp;&raquo; et créer un nouveau fichier &nbsp;&raquo; create.cshtml &nbsp;&raquo; dans la fenêtre qui va s&rsquo;afficher.</p>
<p>Le code source du formulaire d&rsquo;enregistrement d&rsquo;une personne est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 800px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">&lt;form method=<span style="color: #006080">&quot;post&quot;</span> action=<span style="color: #006080">&quot;&quot;</span>&gt;<br />    @* Notification en cas d'erreur de validation *@<br />    @Html.ValidationSummary(<span style="color: #006080">&quot;Veuillez corriger les erreurs suivantes:&quot;</span>)<br /><br />    &lt;fieldset&gt;<br />        &lt;legend&gt;Registration Form&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;nom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;nom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;nom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Nom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;nom&quot;</span> name=<span style="color: #006080">&quot;nom&quot;</span> title=<span style="color: #006080">&quot;Nom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@nom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;nom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;nom&quot;</span>)<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;prenom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;prenom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;prenom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Prénom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;prenom&quot;</span> name=<span style="color: #006080">&quot;prenom&quot;</span> title=<span style="color: #006080">&quot;Prénom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@prenom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;prenom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;prenom&quot;</span>)<br />            &lt;/li&gt;<br />        &lt;/ol&gt;<br />        &lt;input type=<span style="color: #006080">&quot;submit&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;Enregistrer&quot;</span> title=<span style="color: #006080">&quot;Enregistrer&quot;</span> /&gt;<br />        <br />    &lt;/fieldset&gt;<br />&lt;/form&gt;</pre>
<p></div>
<p>Afin d&rsquo;envoyer des données correctes vers votre classe entité pour laquelle vous avez défini certains champs comme obligatoires, vous devez procéder à la validation des données utilisateur.</p>
<p>Les méthodes <strong>@Html.ValidationSummary()</strong> et <strong>@Html.ValidationMessage()</strong> sont utilisées pour afficher les messages d&rsquo;erreurs de validation à l&rsquo;utilisateur.</p>
<p>Vous allez utiliser JQuery et les nouvelles classes de validation System.Web.WebPages.ValidationHelper et System.Web.WebPages.Validator qui ont été introduites par WebPages 2 pour effectuer en seulement quelques lignes de code, des tâches de validation de données puissantes.</p>
<p>Le code pour effectuer cela est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #008000">// Ajout des scripts de validation</span><br />   Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery-1.6.2.min.js&quot;</span>);<br />   Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.min.js&quot;</span>);<br />   Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.unobtrusive.min.js&quot;</span>);<br /><br />   <span style="color: #008000">// Validation du nom</span><br />   Validation.RequireField(<span style="color: #006080">&quot;nom&quot;</span>, <span style="color: #006080">&quot;Le nom est obligatoire.&quot;</span>);<br />   <span style="color: #008000">// Validation du prénom</span><br />   Validation.RequireField(<span style="color: #006080">&quot;prenom&quot;</span>, <span style="color: #006080">&quot;Le prénom est obligatoire.&quot;</span>);</pre>
<p></div>
<p>Il ne vous reste plus qu&rsquo;à écrire le code permettant d&rsquo;ajouter les données postées par un utilisateur dans la base de données :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><br />var pr = <span style="color: #0000ff;">new</span> PersonneRepository();<br />                 var personne = <span style="color: #0000ff;">new</span> Personne{<br />                 Nom = nom, Prenom = prenom};<br />                 <span style="color: #008000;">//Ajout des données sur la personne</span><br />                 pr.Add(personne);</pre>
<p></div>
<p>Le code complet de la page Create.cshtml est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 1200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><br />@{<br />    <span style="color: #008000">// Définition du layout et du titre de la page</span><br />    Layout = <span style="color: #006080">&quot;~/_SiteLayout.cshtml&quot;</span>;<br />    Page.Title = <span style="color: #006080">&quot;Register an Account&quot;</span>;<br /><br />    <span style="color: #008000">// initialisation des varaiables</span><br />    var nom = <span style="color: #006080">&quot;&quot;</span>;<br />    var prenom = <span style="color: #006080">&quot;&quot;</span>;<br />   <br />     <span style="color: #008000">// Ajout des scripts de validation</span><br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery-1.6.2.min.js&quot;</span>);<br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.min.js&quot;</span>);<br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.unobtrusive.min.js&quot;</span>);<br /><br />    <span style="color: #008000">// Validation du nom</span><br />    Validation.RequireField(<span style="color: #006080">&quot;nom&quot;</span>, <span style="color: #006080">&quot;Le nom est obligatoire.&quot;</span>);<br />    <span style="color: #008000">// Validation du prénom</span><br />    Validation.RequireField(<span style="color: #006080">&quot;prenom&quot;</span>, <span style="color: #006080">&quot;Le prénom est obligatoire.&quot;</span>);<br />    <span style="color: #008000">//Triatement des données si s'est une requête POST</span><br />    <span style="color: #0000ff">if</span> (IsPost) {<br />        nom = Request.Form[<span style="color: #006080">&quot;nom&quot;</span>];<br />        prenom= Request.Form[<span style="color: #006080">&quot;prenom&quot;</span>];<br />        <br />          <span style="color: #0000ff">if</span> (Validation.IsValid()) { <br />                var pr = <span style="color: #0000ff">new</span> PersonneRepository();<br />                 var personne = <span style="color: #0000ff">new</span> Personne{<br />                 Nom = nom, Prenom = prenom};<br />                 <span style="color: #008000">//Ajout des données sur la personne</span><br />                 pr.Add(personne);<br />                 Response.Redirect(<span style="color: #006080">&quot;Index&quot;</span>);<br />             }<br />    };<br />   <br />                  <br />        }    <br />   <br /><br />&lt;hgroup <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;title&quot;</span>&gt;<br />    &lt;h1&gt;Ajout d<span style="color: #006080">'un nouvel enregistrement.&lt;/h1&gt;<br />   &gt;<br />&lt;/hgroup&gt;<br /><br />&lt;form method=&quot;post&quot; action=&quot;&quot;&gt;<br />    @* Notification en cas d'</span>erreur de validation *@<br />    @Html.ValidationSummary(<span style="color: #006080">&quot;Veuillez corriger les erreurs suivantes:&quot;</span>)<br /><br />    &lt;fieldset&gt;<br />        &lt;legend&gt;Registration Form&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;nom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;nom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;nom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Nom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;nom&quot;</span> name=<span style="color: #006080">&quot;nom&quot;</span> title=<span style="color: #006080">&quot;Nom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@nom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;nom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;nom&quot;</span>)<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;prenom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;prenom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;prenom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Prénom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;prenom&quot;</span> name=<span style="color: #006080">&quot;prenom&quot;</span> title=<span style="color: #006080">&quot;Prénom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@prenom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;prenom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;prenom&quot;</span>)<br />            &lt;/li&gt;<br />        &lt;/ol&gt;<br />        &lt;input type=<span style="color: #006080">&quot;submit&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;Enregistrer&quot;</span> title=<span style="color: #006080">&quot;Enregistrer&quot;</span> /&gt;<br />        <br />    &lt;/fieldset&gt;<br />&lt;/form&gt;<br />&lt;a href=<span style="color: #006080">&quot;Index&quot;</span>&gt;Retour à la liste&lt;/a&gt;</pre>
<p></div>
<p>À l&rsquo;exécution de cette page, vous obtenez le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/enregpersonne.png" alt="" title="" /></p>
<p>En cas d&rsquo;erreur de validation, vous aurez le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/enregpersonneerreurvalidation.png" alt="" title="" /></p>
<p><strong>4 &#8211;  Modification</strong></p>
<p>Après l&rsquo;enregistrement des données sur une personne, voyons maintenant comment nous allons implémenter une nouvelle page permettant de procéder à la mise à jour des informations sur une personne.</p>
<p>Comme vous avez ajouté un lien &nbsp;&raquo; Editer &nbsp;&raquo; dans le tableau des personnes qui pointe sur la page &nbsp;&raquo; Edit &laquo;&nbsp;, vous allez créer un nouveau fichier cshtml ayant ce nom.</p>
<p>La page doit afficher par défaut les informations qui doivent être modifiées dans des zones éditables. Vous allez donc dans un premier temps récupérer ces informations. Le code pour effectuer cela est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">int</span> id = Request[<span style="color: #006080;">"id"</span>].AsInt();<br /><br />    var db = <span style="color: #0000ff;">new</span> WebMatrixCrudAppContext();<br />    var personne = <span style="color: #0000ff;">new</span> Personne();<br />    personne = db.Personnes.Find(id);<br />    <span style="color: #008000;">// initialisation des variables</span><br />    var nom = personne.Nom;<br />    var prenom = personne.Prenom;</pre>
<p></div>
<p>Le code du formulaire de modification est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 800px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">&lt;form method=<span style="color: #006080">&quot;post&quot;</span> action=<span style="color: #006080">&quot;&quot;</span>&gt;<br />    @* If at least one validation error exists, notify the user *@<br />    @Html.ValidationSummary(<span style="color: #006080">&quot;Veuillez corriger les erreurs suivantes:&quot;</span>)<br /><br />    &lt;fieldset&gt;<br />        &lt;legend&gt;Formulaire de modification&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;nom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;nom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;nom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Nom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;nom&quot;</span> name=<span style="color: #006080">&quot;nom&quot;</span> title=<span style="color: #006080">&quot;Nom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@nom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;nom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;nom&quot;</span>)<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;prenom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;prenom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;prenom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Prénom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;prenom&quot;</span> name=<span style="color: #006080">&quot;prenom&quot;</span> title=<span style="color: #006080">&quot;Prénom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@prenom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;prenom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;prenom&quot;</span>)<br />            &lt;/li&gt;<br />        &lt;/ol&gt;<br />        &lt;input type=<span style="color: #006080">&quot;submit&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;Modifier&quot;</span> title=<span style="color: #006080">&quot;Modifier&quot;</span> /&gt;<br />        <br />    &lt;/fieldset&gt;<br />&lt;/form&gt;</pre>
<p></div>
<p>Le code permettant de prendre en compte les modifications dans la base de données est le suivant</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">personne.Nom = nom;<br />personne.Prenom = prenom;<br /><span style="color: #008000;">//Modification des données sur la personne</span><br />pr.Update(personne);</pre>
<p></div>
<p>Le code complet de la page Edit.cshtml est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 1200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@<span style="color: #0000ff">using</span> System.Data<br />@{<br />    <span style="color: #008000">// Définition du layout et du titre de la page</span><br />    Layout = <span style="color: #006080">&quot;~/_SiteLayout.cshtml&quot;</span>;<br />    Page.Title = <span style="color: #006080">&quot;Modification d'une personne&quot;</span>;<br /><br />    <br />    <span style="color: #0000ff">int</span> id = Request[<span style="color: #006080">&quot;id&quot;</span>].AsInt();<br /><br />    var pr = <span style="color: #0000ff">new</span> PersonneRepository();<br />    var personne = <span style="color: #0000ff">new</span> Personne();<br />    personne = pr.Find(id);<br />    <span style="color: #008000">// initialisation des variables</span><br />    var nom = personne.Nom;<br />    var prenom = personne.Prenom;<br />   <br />    <span style="color: #008000">// Ajout des scripts de validation</span><br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery-1.6.2.min.js&quot;</span>);<br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.min.js&quot;</span>);<br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.unobtrusive.min.js&quot;</span>);<br /><br />   <span style="color: #008000">// Validation du nom</span><br />    Validation.RequireField(<span style="color: #006080">&quot;nom&quot;</span>, <span style="color: #006080">&quot;Le nom est obligatoire.&quot;</span>);<br />   <span style="color: #008000">// Validation du prénom</span><br />    Validation.RequireField(<span style="color: #006080">&quot;prenom&quot;</span>, <span style="color: #006080">&quot;Le prénom est obligatoire.&quot;</span>);<br />    <span style="color: #008000">//Traitement des données si s'est une requête POST</span><br />    <span style="color: #0000ff">if</span> (IsPost) {<br />        nom = Request.Form[<span style="color: #006080">&quot;nom&quot;</span>];<br />        prenom= Request.Form[<span style="color: #006080">&quot;prenom&quot;</span>];<br />        <br />          <span style="color: #0000ff">if</span> (Validation.IsValid()) { <br />                <br />                 personne.Nom = nom;<br />                 personne.Prenom = prenom;<br />                 <span style="color: #008000">//Modification des données sur la personne</span><br />                 pr.Update(personne);<br />            <br />                 Response.Redirect(<span style="color: #006080">&quot;Index&quot;</span>);<br />                <br />             }<br />    };<br />   <br />                  <br />        }    <br />   <br /><br />&lt;hgroup <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;title&quot;</span>&gt;<br />    &lt;h1&gt;Mise à jour des données.&lt;/h1&gt;<br />&lt;/hgroup&gt;<br /><br />&lt;form method=<span style="color: #006080">&quot;post&quot;</span> action=<span style="color: #006080">&quot;&quot;</span>&gt;<br />    @* If at least one validation error exists, notify the user *@<br />    @Html.ValidationSummary(<span style="color: #006080">&quot;Veuillez corriger les erreurs suivantes:&quot;</span>)<br /><br />    &lt;fieldset&gt;<br />        &lt;legend&gt;Formulaire de modification&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;nom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;nom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;nom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Nom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;nom&quot;</span> name=<span style="color: #006080">&quot;nom&quot;</span> title=<span style="color: #006080">&quot;Nom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@nom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;nom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;nom&quot;</span>)<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;prenom&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;prenom&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;prenom&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Prénom:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;prenom&quot;</span> name=<span style="color: #006080">&quot;prenom&quot;</span> title=<span style="color: #006080">&quot;Prénom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@prenom&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;prenom&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;prenom&quot;</span>)<br />            &lt;/li&gt;<br />        &lt;/ol&gt;<br />        &lt;input type=<span style="color: #006080">&quot;submit&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;Modifier&quot;</span> title=<span style="color: #006080">&quot;Modifier&quot;</span> /&gt;<br />        <br />    &lt;/fieldset&gt;<br />&lt;/form&gt;<br /><br />&lt;p&gt;<br /> &lt;a href=<span style="color: #006080">&quot;Index&quot;</span>&gt;Retour à la liste&lt;/a&gt;<br />&lt;/p&gt;</pre>
<p></div>
<p>À l&rsquo;exécution de la page, vous obtenez le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/modifpersonne.png" alt="" title="" /></p>
<p><strong>5 &#8211; Suppression</strong></p>
<p>Pour finir avec la table Personnes, vous allez maintenant écrire le code permettant de supprimer un enregistrement dans la base de données. Créez pour cela une nouvelle page Delete.cshtml.</p>
<p>Afin d&rsquo;éviter les suppressions accidentelles, vous allez dans un premier temps afficher dans cette page le récapitulatif des informations sur une personne avec un message de confirmation de suppression.</p>
<p>Le code pour la page Delete reprend celui de la page Edit, à la différence que vous allez ajouter dans un formulaire un bouton permettant de procéder à la suppression d&rsquo;un enregistrement :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">&lt;form method=<span style="color: #006080;">"post"</span> action=<span style="color: #006080;">""</span>&gt;<br />    &lt;p&gt;<br />    &lt;input type=<span style="color: #006080;">"submit"</span> <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"Supprimer"</span> title=<span style="color: #006080;">"Supprimer"</span> /&gt;<br /> &lt;a href=<span style="color: #006080;">"Index"</span>&gt;Retour à la liste&lt;/a&gt;<br />    &lt;/p&gt;<br />    &lt;/form&gt;</pre>
<p></div>
<p>Vous allez également ajouter dans ce fichier le code permettant de supprimer les données dans la base de données en cas de clic sur le bouton supprimer :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><br /><span style="color: #0000ff;">if</span>(IsPost)<br />    {<br />            pr.Remove(personne);<br />            Response.Redirect(<span style="color: #006080;">"Index"</span>);<br />    }<br />            </pre>
<p></div>
<p>Le code complet de la page Delete.cshtml est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 1200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">@{<br />   <span style="color: #008000;">// Définition du layout et du titre de la page</span><br />    Layout = <span style="color: #006080;">"~/_SiteLayout.cshtml"</span>;<br />    Page.Title = <span style="color: #006080;">"Détails"</span>;<br /><br />    <span style="color: #008000;">//Lecture des données sur une personne</span><br />    <span style="color: #0000ff;">int</span> id = Request[<span style="color: #006080;">"id"</span>].AsInt();<br />    var pr = <span style="color: #0000ff;">new</span> PersonneRepository();<br />    var personne = <span style="color: #0000ff;">new</span> Personne();<br />    personne = pr.Find(id);<br />    <span style="color: #008000;">//Traitement des données si s'est une requête POST</span><br />    <span style="color: #0000ff;">if</span>(IsPost)<br />    {<br />            <span style="color: #008000;">//Supression de l'enregistrement</span><br />            pr.Remove(personne);<br />            Response.Redirect(<span style="color: #006080;">"Index"</span>);<br />    }<br />                  <br />}    <br />&lt;hgroup <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"title"</span>&gt;<br />    &lt;h1&gt;Suppression.&lt;/h1&gt;<br />   &lt;h3&gt;Êtes-vous sur de vouloir supprimer cet enregistrement ?&lt;/h3&gt;<br />&lt;/hgroup&gt;  <br /> &lt;fieldset&gt;<br />        &lt;legend&gt;&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"nom"</span>&gt;<br />                &lt;label&gt;Nom:&lt;/label&gt;<br />                &lt;label&gt;@personne.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"prenom"</span>&gt;<br />                &lt;label&gt;Prénom:&lt;/label&gt;<br />                &lt;label&gt;@personne.Prenom&lt;/label&gt;<br />            &lt;/li&gt;<br />        &lt;/ol&gt; <br /> <br />    &lt;/fieldset&gt;<br /><br /><br />&lt;form method=<span style="color: #006080;">"post"</span> action=<span style="color: #006080;">""</span>&gt;<br />    &lt;p&gt;<br />    &lt;input type=<span style="color: #006080;">"submit"</span> <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"Supprimer"</span> title=<span style="color: #006080;">"Supprimer"</span> /&gt;<br /> &lt;a href=<span style="color: #006080;">"Index"</span>&gt;Retour à la liste&lt;/a&gt;<br />    &lt;/p&gt;<br />    &lt;/form&gt;</pre>
<p></div>
<p>Ce qui donne le résultat suivant à l&rsquo;exécution :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/deletepersonne.png" alt="" title="" /></p>
<p>Compte tenu du fait que l&rsquo;implémentation des fonctionnalités pour la table Organismes reprend plusieurs des principes et méthodes qui ont été utilisés pour la table Personnes, nous n&rsquo;allons plus revenir sur la création des pages d&rsquo;affichage, d&rsquo;enregistrement, de mise à jour ou de suppression d&rsquo;un organisme.</p>
<p>Pour écrire le code de ces pages, veuillez vous référer à celui pour la table Personnes ou à défaut, regarder le code source pour ces pages dans les fichiers du projet qui sont disponibles en téléchargement à la fin de l&rsquo;article.</p>
<p>La prochaine et dernière partie portera donc sur l’implémentation des fonctionnalités CRUD pour la table Affiliations, qui sera un peu différente puisque c&rsquo;est table association.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Création d’une application CRUD avec WebMatrix, Razor et Entity Framework Part 1 : Introduction et présentation des outils</title>
		<link>https://blog.developpez.com/lilroma/p10870/net/creation_d_une_application_crud_avec_web</link>
		<comments>https://blog.developpez.com/lilroma/p10870/net/creation_d_une_application_crud_avec_web#comments</comments>
		<pubDate>Fri, 23 Mar 2012 15:40:55 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[WebMatrix]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J’ai eu à développer récemment une application CRUD avec WebMatrix. Utilisant principalement la classe DataBase de l’espace de nom Microsoft.Data pour la manipulation des données, lorsque j’ai aperçu Entity Framework dans les packages NuGet avec WebMatrix 2 bêta, je me &#8230; <a href="https://blog.developpez.com/lilroma/p10870/net/creation_d_une_application_crud_avec_web">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>J’ai eu à développer récemment une application CRUD avec WebMatrix. Utilisant principalement la classe DataBase de l’espace de nom Microsoft.Data pour la manipulation des données, lorsque j’ai aperçu Entity Framework dans les packages NuGet avec WebMatrix 2 bêta, je me suis dit génial ! Ça veut dire que je peux l’utiliser dans ma solution.</p>
<p>J’ai donc opté pour l’utilisation de la bibliothèque au sein de mon application WebMatrix. Entity Framework est en passe de devenir un standard pour la manipulation des données et est recommandé par Microsoft.  </p>
<p>Contrairement avec Visual Studio et ASP.NET ou l’on dispose de plusieurs outils rendant facile la conception d’une application CRUD avec Entity Framework, sur WebMatrix, c’est un peu compliqué et l’on ne dispose pas des fonctionnalités comme l’échafaudage, et encore moins des ressources sur Internet.</p>
<p>C’est pourquoi, j’ai donc décidé de fournir au travers de cet article une démarche pas à pas avec autant que possible des détails pour la conception d’une application CRUD avec WebMatrix, Razor et Entity Framework.</p>
<p><span id="more-54"></span></p>
<p>Le lecteur tout au long de ce tutoriel, pourra se familiariser avec WebMatrix, Razor, Entity Framework, le gestionnaire de packages open source .NET NuGet pour WebMatrix et le gestionnaire de base de données SQL Server Compact Edition.</p>
<p>Cet article est essentiellement destiné aux débutants. Aucun prérequis n’est donc nécessaire pour sa bonne compréhension. Mais, il est néanmoins conseillé que vous vous soyez familiarisé avec WebMatrix et Razor.</p>
<p>Si ce n’est pas le cas,  je vous conseille de lire dans un premier temps mon tutoriel de présentation de WebMatrix ainsi que  mon tutoriel sur Razor.</p>
<p><strong>Description des outils de travail</strong></p>
<p><strong>WebMatrix </strong></p>
<p>Pour rappel, WebMatrix est un environnement de développement Web léger (15 Mo), efficace et surtout gratuit, développé par Microsoft. Il permet aux développeurs Web de créer et gérer des applications Web sur la plate-forme Windows, tout en restant compatibles avec les produits Microsoft Visual Studio, SQL Server ou encore PHP sur Windows.</p>
<p>Lire le tutoriel sur la <a href="http://rdonfack.developpez.com/tutoriels/web/webmatrix-decouverte-et-prise-main-outil-developpement-web-gratuit-tout/">présentation de WebMatrix</a>.</p>
<p> Pour cet article, nous utiliserons la bêta de WebMatrix 2, qui est la version la plus récente de l’environnement de développement Web. L&rsquo;EDI est téléchargeable <a href="http://aka.ms/webmatrix2blog">sur cette page</a>.</p>
<p>Son installation est assez simple et se fait via Windows Installer. L’outil installe automatiquement SQL Server Compact Edition et WebPages 2 Developer Preview, sur lequel repose les pages Web ASP.NET écrites avec WebMatrix.</p>
<p><strong>Razor</strong></p>
<p>Razor a été conçu pour faciliter la conception des pages ASP.NET. Il introduit une syntaxe de programmation assez facilement compréhensible, qui vous permet d&rsquo;insérer du code serveur dans une page Web qui peut également contenir du HTML, du CSS et des scripts JavaScript.</p>
<p>Le moteur Razor est fluide, compact, expressif et s&rsquo;appuie sur la syntaxe des langages .NET C# et Visual Basic .NET. Il offre la puissance d&rsquo;ASP.NET pour la création rapide des applications Web fonctionnelles et sophistiquées.</p>
<p>Lire mon tutoriel sur <a href="http://rdonfack.developpez.com/tutoriels/dotnet/creation-pages-web-asp-net-utilisant-moteur-vue-razor/">la présentation de Razor</a>.</p>
<p><strong>SQL Server Compact Edition</strong></p>
<p>SQL Server Compact Edition. Est un gestionnaire de base de données relationnelle compact, gratuit, mis au point par Microsoft pour le développement des applications pouvant s’exécuter sur des ordinateurs de bureau et les dispositifs mobiles.</p>
<p>SQL Server Compact partage un modèle de programmation commun avec différentes éditions de SQL Server qui permet aux développeurs de créer des applications natives et managées. SQL Server Compact fournit des fonctionnalités de base de données relationnelle : une source de données fiable, un processeur d’optimisation des requêtes et des possibilités de connectivité fiables et évolutives.<br />
La prise en charge du développement pour SQL Server Compact est fournie par Visual Studio et également WebMatrix. L’environnement intègre un éditeur graphique permettant de créer, modifier, exécuter des requêtes et administrer une base de données SQL Server Compact.</p>
<p><strong>Entity Framework</strong></p>
<p>De plus en plus, les développeurs préfèrent utiliser des données comme des objets, au lieu d’utiliser les requêtes SQL pour interroger directement la base de données.  Entity Framework est un ORM permettant aux développeurs de créer des applications d&rsquo;accès aux données en programmant par rapport à un modèle d&rsquo;application conceptuel au lieu de programmer directement par rapport à un schéma de stockage relationnel. L&rsquo;objectif est de diminuer la quantité de code et les besoins en maintenance pour les applications orientées objet.</p>
<p>Plusieurs approches peuvent être utilisées avec Entity Framework pour accéder aux données. Dans notre cas, c’est l’approche Code First qui sera utilisée.</p>
<p>Cette approche permet de définir tout d’abord les objets dans le code, ensuite utiliser EF pour créer la base de données correspondante. </p>
<p><strong>NuGet</strong></p>
<p>NuGet est un gestionnaire de packages  .NET open source. Il est disponible comme une extension pour les environnements de développement .NET Visual Studio, SharpDevelop et est intégré par défaut dans la version 2 de WebMatrix. Il fournit au développeur une meilleure expérience pour la gestion des packages et dépendances, et élimine presque tous les défis d&rsquo;intégration d&rsquo;une bibliothèque tierce open source ou gratuite dans un projet .NET.</p>
<p>Lire mon tutoriel sur <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/">la présentation de NuGet</a>.</p>
<p>Dans la seconde partie, nous allons créer l’application, installer Entity Framework à partir de NuGet et créer le modèle objet pour nos entités.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebMatrix 2 beta : intégration du gestionnaire de packages NuGet et la galerie d’extensions</title>
		<link>https://blog.developpez.com/lilroma/p10639/net/webmatrix_2_beta_integration_du_gestionn</link>
		<comments>https://blog.developpez.com/lilroma/p10639/net/webmatrix_2_beta_integration_du_gestionn#comments</comments>
		<pubDate>Tue, 10 Jan 2012 15:41:46 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[La gestion simple et aisée des briques logicielles pour une application et L’extensibilité sont des fonctionnalités importantes pour un environnement de développement. WebMatrix 2 bêta, en plus des nouvelles fonctionnalités assez intéressantes que nous avons présenté jusqu’ici (authentification en utilisant &#8230; <a href="https://blog.developpez.com/lilroma/p10639/net/webmatrix_2_beta_integration_du_gestionn">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>La gestion simple et aisée des briques logicielles pour une application et L’extensibilité sont des fonctionnalités importantes pour un environnement de développement.</p>
<p>WebMatrix 2 bêta, en plus des nouvelles fonctionnalités assez intéressantes que nous avons présenté jusqu’ici (<a href="http://blog.developpez.com/lilroma/p10537/">authentification en utilisant un compte Twitter ou Facebook</a>, <a href="http://blog.developpez.com/lilroma/p10518/">support amélioré pour PHP</a>, <a href="http://blog.developpez.com/lilroma/p10574/">amélioration de la validation des données utilisateur</a>, etc.) intègre désormais une déclinaison du gestionnaire de packages .NET open source NuGet, et une galerie d’extensions.</p>
<table>
<tr align='center'>
<td align='center'><img src="http://blog.developpez.com/media/WebMatrix.jpg" width="215" height="234" alt="" /></td>
</tr>
</table>
<p><span id="more-52"></span></p>
<p><strong>Le gestionnaire de packages NuGet pour WebMatrix</strong></p>
<p>De nos jours, il est difficile de concevoir une application sans toute foi faire appel à des bibliothèques externes.  La gestion (téléchargement, installation, configuration, mises à jour) de ces dépendances externes peut rapidement devenir un travail long et complexe. NuGet offre un moyen simple pour effectuer ces opérations. </p>
<p>Depuis la première version de WebMatrix, l’accès aux bibliothèques externes se faisait à travers la page d’administration d’ASP.NET WebPages dans le navigateur. Le développeur disposait uniquement que des fonctionnalités de recherche et d’installation et suppression des packages depuis cette page. Les fonctionnalités de mise à jour, configuration et autres n’étaient pas prises en charge.</p>
<p>Avec la version 2 de WebMatrix, NuGet est entièrement intégré dans l’espace de travail de l’environnement Web, afin de réduire le temps et les étapes nécessaires pour obtenir et gérer un package. Désormais, dans une application Web utilisant WebMatrix, le développeur pourra facilement ajouter, supprimer, configurer et mettre à jour une dépendance.</p>
<p>Nous verrons donc dans ce billet de blog, comme utiliser NuGet avec WebMatrix pour effectuer ces tâches.</p>
<p><strong>Accès à NuGet</strong></p>
<p>Nous allons dans un premier temps créer un nouveau projet en utilisant le modèle « Site Starter ». Après ouverture du projet, nous devons aller dans l’espace de travail « Files ».</p>
<p>Dans le ruban de la barre d’outils, vous verrez un nouveau bouton « Gallery » comme l’illustre la capture ci-dessous :</p>
<p><img src="http://blog.developpez.com/media/nugetrubon.PNG" width="386" height="91" alt="" /> </p>
<p>En cliquant sur le bouton Gallery, NuGet affiche par défaut les packages les plus utiles, ainsi que les packages qui sont déjà installés dans votre application.</p>
<p><img src="http://blog.developpez.com/media/Defaultpackgeslist.PNG" width="333" height="288" alt="" /> </p>
<p>Pour voir tous les packages disponibles, il suffit de cliquer sur le bouton contenant le logo de NuGet. À ce moment, une nouvelle fenêtre va s’afficher vous permettant de visualiser, mettre à jour et supprimer un package.</p>
<p><img src="http://blog.developpez.com/media/nugetgallery.PNG" width="714" height="512" alt="" /></p>
<p><strong>Installation d’un package</strong></p>
<p>L’installation d’un package peut se faire directement dans la fenêtre d’affichage des packages les plus utiles ou depuis la fenêtre de la galerie NuGet. La procédure dans les deux cas est la même.</p>
<p>Pour installer un package, vous devez dans un premier temps trouver celui-ci. Une zone de recherche est disponible dans la fenêtre du gestionnaire de packages, permettant de retrouver facilement une bibliothèque.</p>
<p>Lorsque vous avez trouvé le package que vous souhaitez installer, cliquez simplement sur son icône et ensuite sur le bouton « Installer », ou double-cliquez sur l’icône du package pour lancer son installation.</p>
<p>Pour notre exemple, nous allons installer le Helper Twitter (Twitter.Helper). Pour cela, nous allons effectuer une recherche pour retrouver notre package et double cliquer sur son icône pour lancer son installation.</p>
<p><img src="http://blog.developpez.com/media/twitterhelper.PNG" width="696" height="222" alt="" /> </p>
<p>Lorsque le téléchargement et l’installation du package s’achèvent, le message d’état suivant s’affiche pour vous signaler que l’installation a été effectuée avec succès.</p>
<p><img src="http://blog.developpez.com/media/Instalnugetcomplete.PNG" width="361" height="35" alt="" /> </p>
<p><strong>NB :</strong> Si le package nécessite que vous acceptiez les termes de licence, une seconde fenêtre va s’afficher après que vous ayez cliqué sur le bouton Install, vous invitant à lire et accepter les termes de licence.</p>
<p>Pour un package contenant plusieurs dépendances, NuGet se charge automatiquement de trouver ces dépendances,, de les télécharger et d’installer celles-ci dans votre application. S’il y a lieu, celui-ci édite automatiquement le fichier Web.Config pour ajouter une référence à la bibliothèque dans votre projet.</p>
<p>Et voila, vous pouvez désormais utiliser le package et profiter de l’InteliSence qu’offre WebMatrix.</p>
<p><img src="http://blog.developpez.com/media/Intellisencetwitter.PNG" width="668" height="206" alt="" /> </p>
<p><strong>Mise à jour et suppression d’un package</strong> </p>
<p>La galerie compare constamment les packages qui sont installés dans votre application avec ceux qui sont disponibles et classifie dans une rubrique ceux dont une mise à jour est disponible.</p>
<p>Ces packages sont visibles depuis la galerie, en sélectionnant l’option « Updates ».</p>
<p><img src="http://blog.developpez.com/media/nugetupdate.PNG" width="385" height="207" alt="" /> </p>
<p>Pour mettre à jour un package, il suffit simplement de sélectionner celui-ci et cliquer sur le bouton Update.</p>
<p>NB : La mise entraine la suppression de la version précédente du package par NuGet et l’installation automatique de la version la plus récente.</p>
<p>Pour supprimer un package, sélectionnez l’option Installed, trouvez le package que vous souhaitez supprimer et cliquez sur le bouton « Uninstall » pour procéder à la suppression de celui-ci.</p>
<p>NB : La suppression d’un package entraine la suppression de toutes les dépendances liées à celui-ci.</p>
<p><strong>Ajouter des flux personnalisés</strong></p>
<p>Vous avez également la possibilité de définir un dépôt spécifique pour vos packages.</p>
<p>Supposons que vous avez  créé votre propre package qui sera utilisé par vous et l’ensemble des membres de votre équipe. Pour cela, vous allez définir un repository et donner le lien vers celui-ci, qui sera utilisé comme source de données par votre équipe.</p>
<p>Pour spécifier une nouvelle source de données dans WebMatrix, il suffit de cliquer sur le Combobox disponible dans la fenêtre de la galerie NuGet, et sélectionner l’option « Add source ».</p>
<p><img src="http://blog.developpez.com/media/Addnugetsource.PNG" width="335" height="179" alt="" /></p>
<p>Dans la boite de dialogue qui apparait, indiquez le nom et l’URL du flux du paquet que vous souhaitez ajouter, puis cliquez sur le bouton « add »</p>
<p><strong>NB :</strong> La source peut être des URL HTTP ou des répertoires locaux ou des répertoires partagés contenant des fichiers de spécifications .nupkg.</p>
<p><img src="http://blog.developpez.com/media/addnugetsource1.PNG" width="520" height="453" alt="" />  </p>
<p>Cliquez ensuite sur le bouton OK pour revenir sur la page précédente. Votre source de données va désormais s’afficher dans la liste déroulante.</p>
<p><strong>Galerie d’extensions WebMatrix</strong></p>
<p>L’extensibilité d’un environnement de développement est une caractéristique importante au succès de celui-ci. L’EDI doit fournir au développeur la possibilité d’étendre ses fonctionnalités de base pour répondre à ses besoins, sans toute fois dégrader les performances de l’éditeur.</p>
<p>En plus d’être un EDI extensible, WebMatrix intègre une galerie d’extensions qui met à la disposition du développeur quasiment les mêmes fonctions que le gestionnaire de packages NuGet pour trouver et installer facilement une extension. D’une interface assez similaire à celle de NuGet pour WebMatrix, la galerie d’extensions vous permet de télécharger, installer, mettre à jour et supprimer des extensions pour WebMatrix.</p>
<p><img src="http://blog.developpez.com/media/extensiongallery.PNG" width="684" height="468" alt="" /></p>
<p>Nous n’allons plus revenir sur les procédures de téléchargement, installation, mise à jour et suppression d’une extension, car la procédure est similaire à celle que nous avons décrite plus haut.</p>
<p>Pour l’instant, juste quelques extensions ont été publiées par les développeurs de WebMatrix, permettant de sauvegarder ses fichiers dans Windows Azure, visualiser les images dans WebMatrix ou encore faire du copier-coller de code.</p>
<p>La création de ses propres extensions peut facilement être effectuée pour un développeur en utilisant MEF. Un modèle de projet sous Visual Studio est d’ailleurs même disponible pour faciliter la tâche. </p>
<p><strong>Conclusion</strong></p>
<p>Force est de constater combien Microsoft à apporter des améliorations à WebMatrix pour faire de l’environnement de développement Web une plateforme adaptée pour des petits projets, mais également pour des projets importants.</p>
<p><strong>Sur le même sujet :</strong></p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10574/net/webmatrix/webmatrix-2-beta-validation-des-donnees/">WebMatrix 2 bêta : validation des données utilisateur</a></p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10537/">WebMatrix 2 bêta : intégrer l’authentification Twitter à son site Web</a></p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10518/">WebMatrix 2 bêta : support amélioré pour PHP avec l’IntelliSense</a> ;</p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10495/">WebMatrix : retour d’expérience sur l&rsquo;EDI Web</a> ;</p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/web/webmatrix-decouverte-et-prise-main-outil-developpement-web-gratuit-tout/">Découverte et prise en main de WebMatrix</a> ;</p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-utilisation-helpers-et-galerie-applications/">WebMatrix : utilisation des Helpers Razor et de la galerie d&rsquo;applications</a> ;</p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10084/net/title-198/">Comment activer et utiliser xdebug avec WebMatrix</a> ; </p>
<p> &#8211; <a href="http://aka.ms/webmatrix2blog">Télécharger WebMatrix 2 bêta</a> .</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft.Web.Optimisation : ou comment optimiser une application ASP.NET en utilisant le regroupement et la minification à la volée du JavaScript et CSS</title>
		<link>https://blog.developpez.com/lilroma/p10462/net/microsoft_web_optimisation_ou_comment_op</link>
		<comments>https://blog.developpez.com/lilroma/p10462/net/microsoft_web_optimisation_ou_comment_op#comments</comments>
		<pubDate>Thu, 03 Nov 2011 16:55:00 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET MVC 3]]></category>
		<category><![CDATA[ASP.NET MVC 4]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[Visual Basic .NET]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Le temps de chargement d’une page est un facteur important dans l’évaluation des performances d’un site Web. Il a un impact non négligeable sur l’expérience utilisateur et même sur le référencement naturel. Plusieurs techniques peuvent être utilisées pour optimiser les &#8230; <a href="https://blog.developpez.com/lilroma/p10462/net/microsoft_web_optimisation_ou_comment_op">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Le temps de chargement d’une page est un facteur important dans l’évaluation des performances d’un site Web. Il a un impact non négligeable sur l’expérience utilisateur et même sur le référencement naturel.</p>
<p>Plusieurs techniques peuvent être utilisées  pour optimiser les performances d’une application Web (mise en cache, compression des fichiers, minification, etc). Je vais me pencher aujourd’hui sur le package NuGet d’optimisation d’un site Web « <strong><a href="http://nuget.org/List/Packages/Microsoft.Web.Optimization">ASP.NET Optimization – Bundling</a></strong> » qui a été publié récemment par Microsoft.</p>
<p>Ce package ajoute le support du regroupement et de la minification des fichiers JavaScript et CSS &#8211; qui sont des caractéristiques d’ASP.NET 4.5 et ASP.NET MVC 4 (disponibles actuellement en version Developper Preview) – avec le minimum d’effort pour les applications ASP.NET 4 et ASP.NET MVC.</p>
<p><img src="http://blog.developpez.com/media/minification.png" width="235" height="235" alt="" /></p>
<p><span id="more-37"></span></p>
<p>Le regroupement et la minification sont des procédés de réduction de la taille des fichiers en les combinant, et en supprimant les espaces et autres caractères  inutiles. Ces méthodes permettent de rendre l’exécution d’une page Web plus rapide avec le moins de demandes de chargement des fichiers. </p>
<p>Nous verrons dans ce billet de blog comment améliorer les performances d’une application Web ASP.NET MVC en utilisant les techniques de regroupement et de minification introduites par le package Microsoft.Web.Optimisation.</p>
<p>Pour commencer, nous allons créer un nouveau projet ASP.NET MVC 3.<br />
Comme l’illustre l’image ci-dessous, nous constatons que notre application contient par défaut un nombre déjà assez important de fichiers JavaScript et CSS.</p>
<p><img src="http://blog.developpez.com/media/capture1.PNG" width="497" height="339" alt="" /> </p>
<p>En exécutant une page de cette application (LogOn.chtml), nous obtenons les statistiques suivantes issues de l’analyse d’un outil de mesure de performance comme <a href="http://developer.yahoo.com/yslow/help/">YSlow</a>.</p>
<p><img src="http://blog.developpez.com/media/test1_01.PNG" width="640" height="196" alt="" /></p>
<p>Pour cette page,  nous avons un nombre total de 7 requêtes HTTP qui ont été effectuées, avec 4 fichiers JavaScript d’une taille totale de 119,9K qui ont été chargés.</p>
<p>Nous allons maintenant essayer de réduire le nombre de requêtes et la taille des fichiers qui sont chargés en utilisant ASP.NeT Optimisation Bundle.</p>
<p>Pour cela, nous allons  dans un premier temps ajouter une référence à Microsoft.Web.Optimisation dans notre application.</p>
<p>L’ajout de ce composant se fera via NuGet. Pour installer le package en utilisant NuGet voir <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/">mon article sur NuGet</a>.</p>
<p><img src="http://blog.developpez.com/media/nugetdwnload.PNG" width="620" height="107" alt="" /> </p>
<p>Après avoir installé le package, nous pouvons démarrer le regroupement et la minificatioon de nos fichiers en ajoutant tout simplement la ligne de code suivant dans la procédure Application_Start() du fichier Global.asax.cs.</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">BundleTable.Bundles.EnableDefaultBundles();</pre>
<p></div>
<p>Et c’est tout ;).</p>
<p>N’oubliez pas d’ajouter une référence à Microsoft.Web.Optimization dans le fichier Global.asax.cs :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">using</span> Microsoft.Web.Optimization;</pre>
<p></div>
<p>Tous les fichiers JavaScript contenus dans le répertoire Scripts (les sous dossiers ne sont pas pris en compte) de notre application seront regroupés, compressés et traités comme un seul fichier.  Ces fichiers seront regroupés par défaut dans un dossier Script.</p>
<p>Ils seront désormais référencés en utilisant la ligne de code suivante :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span> <span style="color: #ff0000;">src</span><span style="color: #0000ff;">="@Url.Content("</span>/<span style="color: #ff0000;">Scripts</span>/<span style="color: #ff0000;">js</span><span style="color: #0000ff;">")"</span> <span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span></pre>
<p></div>
<p>De même, les fichiers CSS contenus dans le répertoire Content seront également compactés par défaut dans un dossier Content.</p>
<p>Ils seront référencés en utilisant la ligne de code suivante :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">link</span> <span style="color: #ff0000;">href</span><span style="color: #0000ff;">="@Url.Content("</span>/<span style="color: #ff0000;">Content</span>/<span style="color: #ff0000;">css</span><span style="color: #0000ff;">")"</span> <span style="color: #ff0000;">rel</span><span style="color: #0000ff;">="stylesheet"</span> <span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/css"</span> <span style="color: #0000ff;">/&gt;</span></pre>
<p></div>
<p>Après avoir appliqué ces modifications, exécutons à nouveau la page précédente. Nous obtenons le résultat suivant :</p>
<p><img src="http://blog.developpez.com/media/test3_01.PNG" width="640" height="233" alt="" /></p>
<p>En comparant avec le résultat précédent, nous constatons que le nombre de requêtes est passé de 7 à 4, avec l’utilisation d’un fichier JavaScript unique, contre quatre précédemment.<br />
C’est déjà une bonne chose. Par contre, on se rend compte que la taille du JavaScript a plutôt augmenté, passant de 119,9k à 437,5k.</p>
<p>Pourquoi avons-nous plutôt une augmentation de la taille du JavaScript ?</p>
<p>En utilisant le dossier Scripts par défaut, ce sont environ une vingtaine de fichiers JavaScript contenus dans notre application ASP.NET MVC qui sont regroupés, minifiés et référencés dans une page qui n’utilise que quatre de ces fichiers.<br />
C’est tout à fait normal donc que malgré l’opération d’optimisation, on se retrouve avec une taille totale de ces fichiers supérieure à celle des quatre référencés dans notre page.  </p>
<p>Pour pallier à cela, nous pouvons définir nos propres regroupements de fichiers.</p>
<p>Avec cette option, nous avons la liberté dans le choix des fichiers qui seront dans un regroupement, ainsi que l’URL qu’aura le regroupement. À ce stade, le choix des dossiers de regroupement doit être fonction de la récurrence des fichiers JavaScript et CSS dans les pages de votre application.</p>
<p>Nous pouvons définir nos regroupements personnalisés en procédant comme suit dans la procédure Application_Start() du fichier Global.asax.cs :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 400px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">BundleTable.Bundles.EnableDefaultBundles();<br /><br />Bundle jsBundle = <span style="color: #0000ff">new</span> Bundle(<span style="color: #006080">&quot;~/Scripts&quot;</span>,<span style="color: #0000ff">typeof</span>(JsMinify));<br />jsBundle.AddFile(<span style="color: #006080">&quot;~/Scripts/jquery-1.5.1.min.js&quot;</span>);<br />jsBundle.AddFile(<span style="color: #006080">&quot;~/Scripts/modernizr-1.7.min.js&quot;</span>);<br />jsBundle.AddFile(<span style="color: #006080">&quot;~/Scripts/jquery.validate.min.js&quot;</span>);<br />jsBundle.AddFile(<span style="color: #006080">&quot;~/Scripts/jquery.validate.unobtrusive.min.js&quot;</span>);<br /><br />BundleTable.Bundles.Add(jsBundle);<br /><br />Bundle cssBundle = <span style="color: #0000ff">new</span> Bundle(<span style="color: #006080">&quot;~/Style&quot;</span>, <span style="color: #0000ff">typeof</span>(CssMinify));<br />cssBundle.AddFile(<span style="color: #006080">&quot;~/content/themes/site.css&quot;</span>);<br />cssBundle.AddFile(<span style="color: #006080">&quot;~/content/themes/base/jquery.ui.all.css&quot;</span>);<br /><br />BundleTable.Bundles.Add(cssBundle);<br /></pre>
<p></div>
<p>Nous allons désormais  référencer ces regroupements dans notre page comme suit :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><br /><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">link</span> <span style="color: #ff0000;">href</span><span style="color: #0000ff;">="@Url.Content("</span>~/<span style="color: #ff0000;">Style</span> <span style="color: #0000ff;">")"</span> <span style="color: #ff0000;">rel</span><span style="color: #0000ff;">="stylesheet"</span> <span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/css"</span> <span style="color: #0000ff;">/&gt;</span><br /><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script</span> <span style="color: #ff0000;">src</span><span style="color: #0000ff;">="@Url.Content("</span>~/<span style="color: #ff0000;">Scripts</span><span style="color: #0000ff;">")"</span> <span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><br /></pre>
<p></div>
<p>Et en exécutant la page précédente, nous obtenons le résultat suivant :</p>
<p><img src="http://blog.developpez.com/media/test2_01.PNG" width="640" height="223" alt="" /></p>
<p>Et voilà, la taille de nos fichiers JavaScript passe de 119,9K à 2,3K, soit une réduction de plus de 95 %.</p>
<p>Vous pouvez également ajouter à votre regroupement tous les fichiers JavaScript d’un répertoire en procédant comme suit :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">jsBundle.AddDirectory(<span style="color: #006080;">"~/Scripts"</span>, <span style="color: #006080;">"*.js"</span>, <span style="color: #0000ff;">false</span>);</pre>
<p></div>
<p>Nous avons maintenant de quoi compresser et réduire au maximum le nombre de hits de nos pages Web avec souplesse. </p>
<p>Seul bémol, la minification des fichiers contenant du code CSS3 semble ne pas fonctionner pour l&rsquo;instant.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[Article]Présentation de Nuget, le gestionnaire de packages .NET</title>
		<link>https://blog.developpez.com/lilroma/p10430/net/article_presentation_de_nuget_le_gestion</link>
		<comments>https://blog.developpez.com/lilroma/p10430/net/article_presentation_de_nuget_le_gestion#comments</comments>
		<pubDate>Mon, 24 Oct 2011 09:29:50 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[La conception d&#8217;une application .NET de nos jours nécessite de plus en plus l&#8217;utilisation des bibliothèques externes. Pour faire appel à celles-ci, le développeur devait dans un premier temps trouver le site où télécharger le composant, vérifier si celui-ci est &#8230; <a href="https://blog.developpez.com/lilroma/p10430/net/article_presentation_de_nuget_le_gestion">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>La conception d&rsquo;une application .NET de nos jours nécessite de plus en plus l&rsquo;utilisation des bibliothèques externes. Pour faire appel à celles-ci, le développeur devait dans un premier temps trouver le site où télécharger le composant, vérifier si celui-ci est compatible avec sa plateforme de développement, installer la bibliothèque dans son projet, ajouter une référence à cette bibliothèque et procéder à l&rsquo;édition de son fichier de configuration.</p>
<p>Pire, si la bibliothèque utilisée nécessite la disponibilité d&rsquo;autres bibliothèques externes, le développeur est obligé de répéter ces étapes pour chaque dépendance du composant.</p>
<p>Ces tâches peuvent donc s&rsquo;avérer assez complexes et demandent parfois des efforts considérables en temps et énergie, sans compter le suivi des mises à jour qui sont parfois fréquentes pour certains composants. La gestion des dépendances pour une application peut donc rapidement devenir un casse-tête pour le développeur.</p>
<p>Nuget est un gestionnaire de package .NET open source qui automatise toutes ces tâches fastidieuses pour un package externe ainsi que ses dépendances dans une application. Nous verrons, au travers de ce tutoriel, cet outil fort intéressant et comment l&rsquo;utiliser pour télécharger, installer, mettre à jour des packages dans Visual Studio 2010. Nous verrons, également comment générer et publier ses propres packages Nuget.</p>
<p>L’article est regroupé au sein des parties suivantes :</p>
<p>I. <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/#LI">Introduction</a></p>
<p>II. <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/#LII">Description de NuGet</a></p>
<p>III. <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/#LIII">Installation de NuGet</a></p>
<p>   III-A. <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/#LIII-A">Installation à parti du site du projet</a></p>
<p>   III-B. <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/#LIII-B">Installation à partir de Visual Studio</a></p>
<p>IV. <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/#LIV">Utilisation de NuGet</a> </p>
<p>IV-A. <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/#LIV-A">Utilisation à partir de la console Package Manager</a></p>
<p>IV-B. <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/#LIV-B">Utilisation de l&rsquo;interface graphique</a>  </p>
<p>V. <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/#LV">Création et Publication de son propre package NuGet</a></p>
<p>V-A. <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/#LV-A">Utilisation de Nuget.exe</a></p>
<p>V-B. <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/#LV-B">Création et publication d&rsquo;un package avec NuGet Package Explorer</a></p>
<p>VI. <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/#LVI">Conclusion</a></p>
<p>L&rsquo;article complet est <a href="http://rdonfack.developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/">disponible sur cette page</a>.</p>
<p>Télécharger <a href="ftp://ftp-developpez.com/rdonfack/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/nuget.pdf">la version PDF</a> (<a href="http://rdonfack.ftp-developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/nuget.pdf">Miroir</a>).</p>
<p>Télécharger <a href="ftp://ftp-developpez.com/rdonfack/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/nuget.zip">la version hors-ligne</a> (<a href="http://rdonfack.ftp-developpez.com/tutoriels/dotnet/presentation-gestionnaire-packages-net-nuget/nuget.zip">Miroir</a>).</p>
<p>Bonne lecture <img src="https://blog.developpez.com/lilroma/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" />  </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC 4 Developer Preview : jQuery Mobile, View Switcher et Browser Overriding</title>
		<link>https://blog.developpez.com/lilroma/p10343/net/asp_net_mvc_4_developer_preview_jquery_m</link>
		<comments>https://blog.developpez.com/lilroma/p10343/net/asp_net_mvc_4_developer_preview_jquery_m#comments</comments>
		<pubDate>Tue, 04 Oct 2011 08:59:01 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET MVC 4]]></category>
		<category><![CDATA[Crystal Report]]></category>
		<category><![CDATA[Mobiles]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans mon précédent billet de blog, nous avons créé notre première application mobile en utilisant le nouveau Template qu’apporte ASP.NET MVC 4. Nous avons également découvert une puissance fonctionnalité introduite par le Framework Web pour le soutien des modes d’affichage. &#8230; <a href="https://blog.developpez.com/lilroma/p10343/net/asp_net_mvc_4_developer_preview_jquery_m">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Dans mon <a href="http://blog.developpez.com/lilroma/p10326/">précédent billet de blog</a>, nous avons créé notre première application mobile en utilisant le nouveau Template qu’apporte ASP.NET MVC 4. Nous avons également découvert une puissance fonctionnalité introduite par le Framework Web pour le soutien des modes d’affichage. </p>
<p>Avec ces nouveautés, nous avons sans apporter aucune modification à nos modèles et contrôleurs, créé des vues personnalisées pour les navigateurs Desktop et les navigateurs mobiles.</p>
<p>Dans ce billet, nous verrons comment procéder autrement en utilisant le package Nuget JQuery.Mobile.MVC.</p>
<p><span id="more-64"></span></p>
<p>Le package jQuery.Mobile.MVC installe la librairie JQuery Mobile qui va permettre la création des interfaces Web optimisées pour les smartphones et autres terminaux tactiles, ainsi que plusieurs autres fichiers pour faciliter la tâche au développeur.  </p>
<p>Ouvrons notre application ASP.NET MVC 4 avec votre éditeur Visual Studio 2010 SP 1 ou Visual Web Developper Express 2010 SP 1.</p>
<p>Nous allons dans un premier temps intégrer la bibliothèque JavaScript à notre projet en utilisant le gestionnaire de packages Nuget.</p>
<p>Pour cela, nous allons faire  un clic droit sur notre projet dans l’explorateur de solution. Dans le menu contextuel qui s’affiche, sélectionnons « Manage Nuget Packages ».</p>
<p>La fenêtre de gestion des packages Nuget s’affiche. Nous devons rechercher le package jQuery.Mobile.MVC en tapant son nom dans la zone de recherche.</p>
<p><img src="http://blog.developpez.com/media/JQuery.MVC.PNG" width="572" height="445" alt="" /> </p>
<p>Nous allons ensuite cliquer sur Install pour que Nuget télécharger et installe automatiquement dans notre projet le package ainsi que toutes ses dépendances.</p>
<p>Nous allons nous rendre compte que plusieurs fichiers ont été ajoutés au projet, dont un nouveau fichier <strong>_Layout.Mobile.cshtml</strong>, <strong>_ViewSwitcher.cshtml</strong> ou encore <strong>ViewSwitcherController.cs</strong>.</p>
<p><img src="http://blog.developpez.com/media/Switcher.PNG" width="287" height="400" alt="" /></p>
<p>Procédons maintenant à l’exécution de notre page pour voir ce qui sera affiché à l’écran en utilisant notre navigateur Firefox, et en définissant comme agent utilisateur iPhone (voir <a href="http://blog.developpez.com/lilroma/p10326/">mon précédent billet de blog</a> pour définir l’agent utilisateur sous Firefox).</p>
<p><img src="http://blog.developpez.com/media/runwebsite5.PNG" width="334" height="448" alt="" /></p>
<p><strong>View Switcher.</strong></p>
<p>Revenons maintenant voir ce qui se trouve sous le capot.</p>
<p>Sur la page affichée dans notre navigateur, nous remarquons qu’une bande noire s’est ajoutée en début de celle-ci avec un lien permettant de basculer sur la vue desktop de la page.</p>
<p>D’où provient cette bande ?</p>
<p>Ouvrons avec notre éditeur la page affichée à l’écran (Index.cshtml).</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@{<br />    ViewBag.Title = <span style="color: #006080">&quot;Home Page&quot;</span>;<br />}<br /><br />&lt;h2&gt;@ViewBag.Message&lt;/h2&gt;<br />&lt;p&gt;<br />    To learn more about ASP.NET MVC visit &lt;a href=<span style="color: #006080">&quot;http://asp.net/mvc&quot;</span> title=<span style="color: #006080">&quot;ASP.NET MVC Website&quot;</span>&gt;http:<span style="color: #008000">//asp.net/mvc&lt;/a&gt;.</span><br />&lt;/p&gt;<br /><br />&lt;ul data-role=<span style="color: #006080">&quot;listview&quot;</span> data-inset=<span style="color: #006080">&quot;true&quot;</span>&gt;<br />    &lt;li data-role=<span style="color: #006080">&quot;list-divider&quot;</span>&gt;Navigation&lt;/li&gt;<br />    &lt;li&gt;@Html.ActionLink(<span style="color: #006080">&quot;About&quot;</span>, <span style="color: #006080">&quot;About&quot;</span>, <span style="color: #006080">&quot;Home&quot;</span>)&lt;/li&gt;<br />    &lt;li&gt;@Html.ActionLink(<span style="color: #006080">&quot;Contact&quot;</span>, <span style="color: #006080">&quot;Contact&quot;</span>, <span style="color: #006080">&quot;Home&quot;</span>)&lt;/li&gt;<br />&lt;/ul&gt;</pre>
<p></div>
<p>À première vue, on se rend compte qu’aucune modification n’a été effectuée dans ce fichier.</p>
<p>Puisque ce fichier est intégré dans le Layout avant d’être affiché, jetons maintenant un coup d’œil sur notre fichier _Layout.Mobile.cshtml. Nous allons apercevoir la ligne de code suivante :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">@Html.Partial(<span style="color: #006080;">"_ViewSwitcher"</span>)</pre>
<p></div>
<p>Qui fait référence à la vue partielle _ViewSwitcher.cshtml. C’est cette vue qui ajoute un lien sur toutes les pages mobiles permettant de basculer du mode d’affichage mobile pour Desktop et vice-versa. Par défaut, elle n’est pas incluse dans les vues Desktop. Pour remédier à cela, vous pouvez juste copier @Html.Partial(&laquo;&nbsp;_ViewSwitcher&nbsp;&raquo;) dans le fichier _Layout.Mobile.cshtml et le coller dans le fichier _Layout.cshtml.</p>
<p>Dans le code de la vue partielle ViewSwitcher, la méthode <strong>GetOverriddenBrowser()</strong> est utilisée pour retourner un objet   HttpBrowserCapabilitiesBase,  qui va donner des informations sur les capacités du navigateur qui a fait la demande. La propriété IsMobileDevice retourne une valeur booléenne permettant de savoir si c’est un navigateur mobile qui effectue la demande.</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 400px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@<span style="color: #0000ff">if</span> (Request.Browser.IsMobileDevice &amp;&amp; Request.HttpMethod == <span style="color: #006080">&quot;GET&quot;</span>)<br />{<br />    &lt;div <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;view-switcher ui-bar-a&quot;</span>&gt;<br />        @<span style="color: #0000ff">if</span> (ViewContext.HttpContext.GetOverriddenBrowser().IsMobileDevice)<br />        {<br />            @: Displaying mobile view<br />            @Html.ActionLink(<span style="color: #006080">&quot;Desktop view&quot;</span>, <span style="color: #006080">&quot;SwitchView&quot;</span>, <span style="color: #006080">&quot;ViewSwitcher&quot;</span>, <span style="color: #0000ff">new</span> { mobile = <span style="color: #0000ff">false</span>, returnUrl = Request.Url.PathAndQuery }, <span style="color: #0000ff">new</span> { rel = <span style="color: #006080">&quot;external&quot;</span> })<br />        } <br />        <span style="color: #0000ff">else</span> <br />        {<br />            @: Displaying desktop view<br />            @Html.ActionLink(<span style="color: #006080">&quot;Mobile view&quot;</span>, <span style="color: #006080">&quot;SwitchView&quot;</span>, <span style="color: #006080">&quot;ViewSwitcher&quot;</span>, <span style="color: #0000ff">new</span> { mobile = <span style="color: #0000ff">true</span>, returnUrl = Request.Url.PathAndQuery }, <span style="color: #0000ff">new</span> { rel = <span style="color: #006080">&quot;external&quot;</span> })<br />        }<br />    &lt;/div&gt;<br />}</pre>
<p></div>
<p><strong>Browser Overriding</strong></p>
<p>Penchons-nous maintenant sur le contrôleur qui est associé à cette vue.</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 300px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><br /><span style="color: #0000ff">using</span> System.Web.Mvc;<br /><span style="color: #0000ff">using</span> System.Web.WebPages;<br /><br /><span style="color: #0000ff">namespace</span> MvcApplication3.Controllers<br />{<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ViewSwitcherController : Controller<br />    {<br />        <span style="color: #0000ff">public</span> RedirectResult SwitchView(<span style="color: #0000ff">bool</span> mobile, <span style="color: #0000ff">string</span> returnUrl) {<br />            <span style="color: #0000ff">if</span> (Request.Browser.IsMobileDevice == mobile)<br />                HttpContext.ClearOverriddenBrowser();<br />            <span style="color: #0000ff">else</span><br />                HttpContext.SetOverriddenBrowser(mobile ? BrowserOverride.Mobile : BrowserOverride.Desktop);<br /><br />            <span style="color: #0000ff">return</span> Redirect(returnUrl);<br />        }<br />    }<br />}</pre>
<p></div>
<p>Le View Switcher utilise une nouvelle fonctionnalité &laquo;&nbsp;Browser Overriding&nbsp;&raquo;, permettant de traiter les demandes d’une application comme  si elles provenaient d’un autre navigateur (Agent utilisateur).</p>
<p>Le Browser Overriding est une caractéristique de base d’ASP.NET MVC 4, et peut de ce fait être utilisé même si vous n’avez pas installé le package jQuery.Mobile.MVC. Avec cette fonctionnalité, en fonction du lien sur lequel l’utilisateur à cliquer (Desktop view ou Mobile view), le contrôleur de la vue Switcher va simuler un agent utilisateur (BrowserOverride.Mobile ou BrowserOverride.Desktop) qui sera utilisé pour charger les vues correspondantes au choix de l’utilisateur malgré que l’agent utilisateur transmit par son navigateur ne soit pas le même.</p>
<p>Le code ci-dessous va donc permettre de substituer l’agent utilisateur du navigateur. Par défaut, les données sur l’agent utilisateur simulé sont stockées en utilisant un cookie. </p>
<p><strong>Conclusion</strong></p>
<p>Nous venons d’apercevoir une fois de plus la puissance fonctionnelle d’ASP.NET MVC 4 pour le développement d’application mobile et Web. Dans le prochain billet de blog, notre attention sera portée sur le Template Web du Framework.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installer et gérer un package Nuget dans plusieurs projets simultanément</title>
		<link>https://blog.developpez.com/lilroma/p10317/net/installer_et_gerer_un_package_nuget_dans</link>
		<comments>https://blog.developpez.com/lilroma/p10317/net/installer_et_gerer_un_package_nuget_dans#comments</comments>
		<pubDate>Mon, 26 Sep 2011 18:05:01 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[Visual Basic .NET]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans mes deux précédents billets de blog, j’avais évoqué comment créer et publier son propre package Nuget en utilisant l’outil Nuget.exe en invite de commandes et, comment utiliser le confort de l’interface graphique de Nuget Explorer pour parvenir au même &#8230; <a href="https://blog.developpez.com/lilroma/p10317/net/installer_et_gerer_un_package_nuget_dans">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Dans mes deux précédents billets de blog, j’avais évoqué comment créer et publier son propre package Nuget en utilisant <a href="http://blog.developpez.com/lilroma/p10314/net/nuget/title-203/">l’outil Nuget.exe en invite de commandes</a> et, comment utiliser <a href="http://blog.developpez.com/lilroma/p10316/net/nuget/creer-et-publier-son-propre-package-nuge/">le confort de l’interface graphique de Nuget Explorer pour parvenir au même résultat</a>.</p>
<p>Aujourd’hui je vais me pencher sur l’utilisation même de Nuget au sein de Visual Studio 2010 pour  installer et gérer des  packages.</p>
<p>Dans ce billet de blog, nous allons découvrir une nouveauté/astuce qui avait été introduite par la dernière version de Nuget, permettant d’installer et maintenir simultanément dans plusieurs projets un package.</p>
<p><span id="more-71"></span></p>
<p>Pour l’exemple, nous devons  disposer comme pré requis Visual Studio 2010 et le gestionnaire de package Nuget.</p>
<p>Lançons votre EDI,  créons une nouvelle solution et ajoutons-y deux projets comme l’illustre l’image ci-dessous :</p>
<p><img src="http://blog.developpez.com/media/addpackage.PNG" width="368" height="105" alt="" /></p>
<p>Nous allons ajouter un package à la fois dans notre application MVC et notre application Windows Forms en une seule opération.</p>
<p>Pour cela,  nous devons faire un clic droit sur notre solution, dans le menu contextuel qui va s’afficher, nous allons cliquer sur « Manage Nuget Packge ».</p>
<p>Dans la fenêtre de gestion des packages Nuget, nous allons essayer d’installer Entity Framework  dans nos deux projets en cliquant sur le bouton « Install ».</p>
<p><img src="http://blog.developpez.com/media/Managepackage.PNG" width="790" height="443" alt="" /></p>
<p>Une seconde fenêtre va s’afficher, nous demandant de sélectionner les projets de notre solution dans lesquels nous souhaitons que Nuget installe le package.</p>
<p><img src="http://blog.developpez.com/media/SelectProjets.PNG" width="398" height="296" alt="" /> </p>
<p>Par défaut, tous les projets de la solution sont cochés.</p>
<p>Nous allons cliquer enfin sur le bouton OK pour lancer l’installation.</p>
<p>Nous nous rendrons compte que Nuget a téléchargé le package et ajouté automatiquement une référence à celui-ci dans les deux projets de notre solution.</p>
<p><img src="http://blog.developpez.com/media/VSExplorer.PNG" width="369" height="362" alt="" /> </p>
<p>Et voilà, c’est tout plutôt facile ;).</p>
<p>Dans la fenêtre de gestion de packages Nuget, grâce au bouton « Manage » désormais affiché sur le package que nous venons d’installer, nous pouvons à tout moment désinstaller le package dans un projet, ou ajouter le package dans un nouveau projet que nous avons ajouté à notre solution.</p>
<p>Pour effectuer une installation directement dans un projet uniquement d’une solution, au lieu de faire un clic droit sur la Solution, faites-le plutôt sur le dossier « References » du projet, et cliquez sur Manage Nuget Packages. </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Créer et publier son propre package Nuget avec Nuget Package Explorer</title>
		<link>https://blog.developpez.com/lilroma/p10316/net/creer_et_publier_son_propre_package_nuge</link>
		<comments>https://blog.developpez.com/lilroma/p10316/net/creer_et_publier_son_propre_package_nuge#comments</comments>
		<pubDate>Sat, 24 Sep 2011 12:42:32 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[Nuget Package Explorer]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans mon précédent billet de blog, j’avais décrit comment utiliser l’utilitaire Nuget.exe pour générer le fichier de spécification et le fichier de package en ligne de commandes, comment éditer le fichier XML et afin comment publier son propre package Nuget &#8230; <a href="https://blog.developpez.com/lilroma/p10316/net/creer_et_publier_son_propre_package_nuge">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Dans mon précédent <a href="http://blog.developpez.com/lilroma/p10314/net/nuget/title-203/">billet de blog</a>, j’avais décrit comment utiliser l’utilitaire Nuget.exe pour générer le fichier de spécification et le fichier de package en ligne de commandes, comment éditer le fichier XML et afin comment publier son propre package Nuget (pour mémoire, Nuget est un gestionnaire de package .NET open source).</p>
<p>Cependant, l’utilisation de l’invite de commandes et l’édition du fichier XML de spécification à la main peuvent s’avérer assez inconfortables pour certaines personnes. C&rsquo;est pourquoi je vais vous présenter dans ce billet de blog une alternative à Nuget.exe, permettant à l’utilisateur de bénéficier du confort d’une interface graphique.</p>
<p>Il s’agit de l’utilitaire <strong>Nuget Package Explorer</strong>, qui met à la disposition de l’utilisateur une interface lui permettant de créer, éditer son fichier de spécification et publier son Forfait Nuget avec le minimum d’effort.</p>
<p><span id="more-70"></span></p>
<p>L’outil est téléchargeable <a href="http://nuget.codeplex.com/releases/59864/clickOnce/NuGetPackageExplorer.application">sur cette page</a>. </p>
<p>Après son installation, vous aurez affiché sur votre écran l’interface utilisateur suivante :</p>
<p><img src="http://blog.developpez.com/media/NugetPackageExplorer.PNG" width="600" height="329" alt="" /></p>
<p>Cliquez sur la ligne « <strong>Create a new package</strong> », pour créer votre package Nuget.</p>
<p>Le package est créé avec comme Meta donnée par défaut, des informations reprises directement depuis votre système.</p>
<p>Cliquez sur le menu « <strong>Edit</strong> », ensuite sur « <strong>Edit Package Metadata</strong> » pour accéder à la fenêtre d’édition du package. </p>
<p><img src="http://blog.developpez.com/media/EditPackage.PNG" width="598" height="309" alt="" /> </p>
<p>L’interface suivante s’affiche avec un formulaire qui vous permettra de renseigner les informations sur votre package :</p>
<p><img src="http://blog.developpez.com/media/CreationNuspekNugetExplorer.PNG" width="598" height="958" alt="" /></p>
<p>Je ne reviendrais pas sur la description de ces informations. Pour plus de détails, lisez mon <a href="http://blog.developpez.com/lilroma/p10314/net/nuget/title-203/">précédent billet de blog sur Nuget</a>.</p>
<p>Comme vous pouvez le constater, les informations importantes qu’il faut renseigner sont en gras. </p>
<p>Lorsque vous avez achevé avec cette étape, validez votre saisie en cliquant sur le bouton OK.</p>
<p>Maintenant, nous allons définir le contenu de notre package Nuget.<br />
Pour cela, nous allons cliquer sur le menu « <strong>Content</strong> » ensuite sur « <strong>Add</strong> ».</p>
<p>Dans le sous-menu qui s’affiche, nous allons dans un premier temps définir les dossiers que nous allons utiliser.</p>
<p>Nuget reconnait par défaut les dossiers : <strong>Content</strong> (pour les fichiers qui seront copiés à la racine de l’application lors de l’installation du package), <strong>Lib</strong> (pour les DLL) et <strong>Tools</strong> (pour les scripts PowerShell associés au package).</p>
<p><img src="http://blog.developpez.com/media/AddFolderNugetExplorer.PNG" width="419" height="181" alt="" /></p>
<p>Pour notre cas, nous allons créer le dossier Lib pour les librairies constituant notre package Nuget.</p>
<p>En faisant un clic droit sur ce dossier, nous avons la possibilité de définir plusieurs sous dossiers en fonction des versions des plateformes de développement que le package supporte (ASP.NET, Silverlight, Windows Phone, etc.).</p>
<p> <img src="http://blog.developpez.com/media/AddSouFolderNugetExplorer.PNG" width="396" height="157" alt="" /></p>
<p> Supposons que notre DLL cible la version 4.0 du Framework .NET. Nous allons donc créer un dossier net40. Nous allons ensuite faire un clic droit sur ce dossier et dans le menu contextuel qui s’affiche, nous allons cliquer sur « <strong>Add Existing File… </strong>». </p>
<p>Nous allons ensuite rechercher notre fichier et l’ajouter comme contenu de notre package.</p>
<p><img src="http://blog.developpez.com/media/AddFileNugetExplorer.PNG" width="671" height="302" alt="" /></p>
<p>Nous pouvons également par un simple geste de glisser/déposer sur l’espace de travail «  Package contents », ajouter un contenu à notre package.</p>
<p>Nous devons maintenant enregistrer nos informations en utilisant le raccourci clavier « Ctrl + S » ou le menu Fichier/Enregistrer.</p>
<p>Et c’est tout ;). Il ne nous reste plus qu’à publier notre package.</p>
<p>Dans mon <a href="http://blog.developpez.com/lilroma/p10314/net/nuget/title-203/">article précédent</a>, j’avais énoncé deux méthodes de publication d’un dépôt Nuget, et j’avais présenté uniquement l’une des deux méthodes.</p>
<p>Nous verrons donc la seconde méthode qui consiste en la publication de notre dépôt Nuget sur la galerie officielle Nuget.</p>
<p>Pour cela, nous allons cliquer sur la commande « <strong>Publish</strong> » du menu fichier. </p>
<p><img src="http://blog.developpez.com/media/PublicPackageNugetExplorer.PNG" width="415" height="278" alt="" /></p>
<p>La fenêtre qui s’affiche nous demande de renseigner notre clé de publication. </p>
<p>Vous pouvez obtenir cette information en vous inscrivant sur le site de la « <strong>NuGet Gallery</strong> » à partir de <a href="http://nuget.org/Users/Account/Register">ce lien</a>.</p>
<p>Et voilà! nous venons de créer et publier notre premier package Nuget sur la galerie officielle du projet.</p>
<p>Votre compte va vous permettre de gérer (édition, suppression, etc.) vos différents dépôts sur la galerie Nuget.</p>
<p>Si vous ne souhaitez pas publier votre dépôt sur la galerie officielle, exporter simplement celui-ci en utilisant la commande Export du menu Fichier, et copier le dossier qui sera généré à l’emplacement de votre choix.</p>
<p>Pour l’utilisation de votre dépôt dans le gestionnaire de packages Nuget au sein de Visual Studio, referez-vous à mon <a href="http://blog.developpez.com/lilroma/p10314/net/nuget/title-203/">précédent billet de blog</a>. </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Créer et publier son propre package Nuget</title>
		<link>https://blog.developpez.com/lilroma/p10314/net/title_203</link>
		<comments>https://blog.developpez.com/lilroma/p10314/net/title_203#comments</comments>
		<pubDate>Fri, 23 Sep 2011 14:42:53 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[Nuget.exe]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Il est difficile de nos jours de concevoir une application .NET sans faire appel à plusieurs bibliothèques externes à l’instar d’Entity Framework, JQuery pour le développeur Web ou encore Ninject. Les rythmes de mises à jour pour ces composants sont &#8230; <a href="https://blog.developpez.com/lilroma/p10314/net/title_203">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<table>
<tr>
<td><img src="http://blog.developpez.com/media/Nuget.PNG" width="237" height="82" alt="" /></td>
<td> Il est difficile de nos jours de concevoir une application .NET sans faire appel à plusieurs bibliothèques externes à l’instar d’Entity Framework, JQuery pour le développeur Web ou encore Ninject. Les rythmes de mises à jour pour ces composants sont parfois assez accélérés. La gestion des dépendances peut donc devenir rapidement un casse-tête pour le développeur.</td>
</tr>
</table>
<p>Pour pallier à cela, le team Web de Microsoft a développé Nuget, un gestionnaire de package qui s’impose de nos jours comme une référence dans l’écosystème .NET.</p>
<p>Pris en charge dans Visual Studio 2010 ou encore dans l’environnement de développement open source SharpDevelop, Nuget a rapidement été adopté par les développeurs .NET et est de plus en plus intégré par défaut dans plusieurs outils (ASP.NET MVC, WebMatrix, etc). Les briques logicielles .NET les plus populaires sont pratiquement toutes compatibles avec celui-ci.</p>
<p><span id="more-69"></span></p>
<p>Comment utiliser donc Nuget pour télécharger et installer une bibliothèque dans mon application ? Comme mettre à jours mes dépendances ? Comment créer mon propre package Nuget et le publier ?</p>
<p>Après plusieurs recherches, j’ai constaté malheureusement qu’il existait très peu de ressource en français sur cet outil. C&rsquo;est pourquoi, j’ai décidé qu’il était temps que la rubrique .NET de Developpez.com soit dotée d’un article assez riche couvrant pratiquement tous les aspects sur Nuget et répondant à ces questions.</p>
<p>Ce billet de blog est donc un extrait de cet article en cours de rédaction, et sera axé principalement sur la création et la publication de son propre package Nuget.</p>
<p>La création d’un package compatible avec Nuget, revient au moment de la publication de votre application à définir à la racine du dossier contenant le projet un fichier XML de spécification Nuget ( .nuspec) et un fichier de package (.nupkg).</p>
<p>Il est recommandé avant de se lancer dans la création de votre package Nuget, de définir les répertoires suivants pour spécifier à Nuget quelles ressources seront utilisées et ou les trouver :</p>
<p><strong>- Lib :</strong> qui va contenir l’ensemble des assemblys qui seront ajoutées en tant que référence lorsque le package sera créé. Si vos assemblys ciblent des versions particulières du Framework .NET, vous devez créer un dossier pour chaque version du Framework pour ces assemblys. </p>
<p><em>Exemple</em> : net30 pour le Framework .NET 3.0 ou encore net40 pour la version 4.0 du framework.NET.</p>
<p><strong>- Content :</strong> qui va contenir les fichiers qui seront copiés à la racine de votre application lorsque le package sera installé.</p>
<p><strong>- Tools :</strong> va contenir les scripts (PowerShell) qui seront ajoutés à la variable d’environnement PATH  quand le package sera installé. </p>
<p>L’outil Nuget.exe, qui est disponible en téléchargement sur le site du projet  sera utilisé pour générer ces fichiers.</p>
<p><strong>1 &#8211; Création du fichier de spécification (.nuspec)</strong></p>
<p>Après avoir téléchargé Nuget.exe, vous devez le placer dans un dossier de votre choix. De préférence, utilisez le dossier C:\Nuget ou celui de votre projet/solution.</p>
<p>Maintenant, à partir de l’invite de commandes, nous allons générer dans un premier temps le fichier XML des spécifications.</p>
<p>Pour cela, en invite de commande, positionnez-vous dans le dossier contenant l’outil Nuget.exe et exécutez la commande suivante :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">NuGet spec NomPackage</pre>
<p></div>
<p><img src="http://blog.developpez.com/media/NugetSpeck.PNG" width="530" height="163" alt="" /></p>
<p>Dans le cas où vous ne fournissez pas le nom du package, le fichier de spécification sera créé avec comme nom par défaut <strong>Package.nuspec</strong>.</p>
<p>Le fichier de spécification est généré par défaut à la racine du dossier contenant le fichier Nuget.exe. Vous pouvez lors de la création de ce fichier, spécifier dans quel dossier vous souhaitez que celui-ci soit créé.</p>
<p>Le fichier XML généré contient par défaut les informations suivantes :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 400px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">&lt;?</span><span style="color: #800000">xml</span> <span style="color: #ff0000">version</span><span style="color: #0000ff">=&quot;1.0&quot;</span>?<span style="color: #0000ff">&gt;</span><br /><span style="color: #0000ff">&lt;</span><span style="color: #800000">package</span> <span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;</span><span style="color: #800000">metadata</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">id</span><span style="color: #0000ff">&gt;</span>MyPackage<span style="color: #0000ff">&lt;/</span><span style="color: #800000">id</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span>1.0<span style="color: #0000ff">&lt;/</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">authors</span><span style="color: #0000ff">&gt;</span>Author here<span style="color: #0000ff">&lt;/</span><span style="color: #800000">authors</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">owners</span><span style="color: #0000ff">&gt;</span>Owner here<span style="color: #0000ff">&lt;/</span><span style="color: #800000">owners</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">licenseUrl</span><span style="color: #0000ff">&gt;</span>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE<span style="color: #0000ff">&lt;/</span><span style="color: #800000">licenseUrl</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">projectUrl</span><span style="color: #0000ff">&gt;</span>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE<span style="color: #0000ff">&lt;/</span><span style="color: #800000">projectUrl</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">iconUrl</span><span style="color: #0000ff">&gt;</span>http://ICON_URL_HERE_OR_DELETE_THIS_LINE<span style="color: #0000ff">&lt;/</span><span style="color: #800000">iconUrl</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">requireLicenseAcceptance</span><span style="color: #0000ff">&gt;</span>false<span style="color: #0000ff">&lt;/</span><span style="color: #800000">requireLicenseAcceptance</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span>Package description<span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">copyright</span><span style="color: #0000ff">&gt;</span>Copyright 2011<span style="color: #0000ff">&lt;/</span><span style="color: #800000">copyright</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">tags</span><span style="color: #0000ff">&gt;</span>Tag1 Tag2<span style="color: #0000ff">&lt;/</span><span style="color: #800000">tags</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">dependencies</span><span style="color: #0000ff">&gt;</span><br />      <span style="color: #0000ff">&lt;</span><span style="color: #800000">dependency</span> <span style="color: #ff0000">id</span><span style="color: #0000ff">=&quot;SampleDependency&quot;</span> <span style="color: #ff0000">version</span><span style="color: #0000ff">=&quot;1.0&quot;</span> <span style="color: #0000ff">/&gt;</span><br />    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">dependencies</span><span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">metadata</span><span style="color: #0000ff">&gt;</span><br /><span style="color: #0000ff">&lt;/</span><span style="color: #800000">package</span><span style="color: #0000ff">&gt;</span><br /></pre>
<p></div>
<p><strong>1.1 &#8211; Description du fichier de spécification </strong></p>
<p>Le nœud <strong>id</strong> est utilisé pour définir l’identifiant unique du package. C’est ce paramètre qui sera utilisé pour répertorier votre application dans la liste des packages Nuget.</p>
<p>Le nœud <strong>version</strong> servira à l’attribution d’un numéro de version à votre package. </p>
<p>Quant au nœud <strong>authors</strong>, il permettra de lister les auteurs du package. Chaque nom d’auteur doit être séparé avec une virgule.</p>
<p><strong>Owners</strong> permettra de définir la liste des propriétaires du package. Chaque nom doit être séparé avec une virgule.</p>
<p><strong>licenseUrl</strong> doit contenir le lien vers les informations de licence de votre package.</p>
<p>Le nœud <strong>projectUrl</strong> sera utilisé pour définir le lien vers le site du projet lié au package.<br />
iconUrl permettra de définir le lien vers l’icône du package. Il est conseillé d’utiliser une image de 32&#215;32 pixels avec un fond transparent.</p>
<p><strong>requiredLicenseAcceptance </strong>sera utilisé pour définir un booléen permettant de spécifier si la licence doit être acceptée ou non avant l&rsquo;installation du package.<br />
Le nœud description sera utilisé pour fournir une brève description du package.</p>
<p><strong>Copyright</strong> permettra définir le droit déposé pour publier et exploiter le composant.</p>
<p>Enfin, le nœud <strong>dependencies</strong> permettra de spécifier la liste des dépendances qui seront requises par le package.</p>
<table>
<tr>
<td><strong>NB: </strong></td>
<td>  &#8211; Les dépendances dont l’ID et le numéro de version ont été renseignés sont téléchargées et installées automatiquement par Nuget lors de l’installation du Package.</td>
</tr>
<tr>
<td></td>
<td> &#8211; Plusieurs de ces informations peuvent directement  être reprises dans le  fichier AssemnlyInfo.cs de votre projet.</td>
</tr>
</table>
<p>Pour Exemple, je vais utiliser le fichier de spécification Nuget suivant pour créer mon package :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">&lt;?</span><span style="color: #800000">xml</span> <span style="color: #ff0000">version</span><span style="color: #0000ff">=&quot;1.0&quot;</span>?<span style="color: #0000ff">&gt;</span><br /><span style="color: #0000ff">&lt;</span><span style="color: #800000">package</span> <span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;</span><span style="color: #800000">metadata</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">id</span><span style="color: #0000ff">&gt;</span>MyNugetPackage<span style="color: #0000ff">&lt;/</span><span style="color: #800000">id</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span>1.0<span style="color: #0000ff">&lt;/</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">authors</span><span style="color: #0000ff">&gt;</span>Romaric<span style="color: #0000ff">&lt;/</span><span style="color: #800000">authors</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">requireLicenseAcceptance</span><span style="color: #0000ff">&gt;</span>false<span style="color: #0000ff">&lt;/</span><span style="color: #800000">requireLicenseAcceptance</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span>Mon premier package Nuget<span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">copyright</span><span style="color: #0000ff">&gt;</span>Copyright 2011<span style="color: #0000ff">&lt;/</span><span style="color: #800000">copyright</span><span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">metadata</span><span style="color: #0000ff">&gt;</span><br /><span style="color: #0000ff">&lt;/</span><span style="color: #800000">package</span><span style="color: #0000ff">&gt;</span> <br /></pre>
<p></div>
<p>Comme vous pouvez le constater, tous les nœuds ne sont pas obligataires, et vous pouvez ajouter des nœuds supplémentaires dans votre fichier de spécification. Les informations qui peuvent être renseignées dans le fichier de spécification sont décrites sur <a href="http://docs.nuget.org/docs/reference/nuspec-reference">cette page</a>. </p>
<p><strong>2 &#8211; Création du package Nuget</strong></p>
<p>Après avoir créé et édité notre fichier de spécification, nous pouvons maintenant générer le package Nuget.</p>
<p>Pour cela, en invite de commandes, nous allons exécuter la commande suivante :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">Nuget pack fichierspecification.nuspec</pre>
<p></div>
<p><img src="http://blog.developpez.com/media/NugetPackageCreate.PNG" width="557" height="148" alt="" /></p>
<p> Le fichier de package .nupkg sera créé à la racine du dossier contenant Nuget.exe avec comme nom par défaut l’ID du package concaténé au numéro de version renseignés dans le fichier de spécification.  Copiez le fichier .nupkg généré à la racine du dossier contenant votre application.</p>
<p>Vous pouvez également spécifier l’emplacement ou sera créé le fichier de package (directement dans votre projet par exemple) en utilisant l’argument –o.</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">Nuget pack c:\MyNugetPackage\Mypackage.nuspec –o c:\MyNugetPackage\</pre>
<p></div>
<p><strong>3 &#8211; Publication de notre Package </strong></p>
<p>Maintenant que nous avons créé notre package Nuget, comment allons-nous procéder pour le publier afin qu’il soit téléchargé directement à partir d’un EDI (VS 2010, WebMatrix, etc.) prenant en charge Nuget.</p>
<p>A ce stade, nous avons deux possibilités : soit nous créons un dépôt spécifique de notre package avec sa propre source, soit nous le référençons comme un dépôt officiel Nuget.</p>
<p>Pour cet article, nous verrons uniquement comment définir un dépôt spécifique de notre projet.</p>
<p>Nous allons tout d’abord dans un premier temps copier notre package dans un dossier local (pour une utilisation par exemple uniquement en local dans vos projets et par votre équipe de développeurs) ou sur un serveur distant.</p>
<p>Et c’est tout ;). Pour toute utilisation du package dans un projet avec Visual Studio, il suffira simplement de renseigner la source en procèdent comme suit : lancez Visual Studio, allez dans les options de l’EDI, dans la catégorie &laquo;&nbsp;Package Manager&nbsp;&raquo;, ajoutez l’adresse de votre projet à la liste.</p>
<p><img src="http://blog.developpez.com/media/AddPackageSource.PNG" width="644" height="381" alt="" /></p>
<p>Validez ensuite sur OK.</p>
<p>Pour utiliser votre package, lancez la fenêtre d’administrations de Nuget en faisant simplement un clic droit sur votre projet/solution, et en sélectionnant la commande <strong>Manage Nuget Packages</strong>.</p>
<p>Sélectionnez ensuite <strong>Online Package</strong>, et cliquez sur le nom de la source que vous avez donné à votre package.</p>
<p><img src="http://blog.developpez.com/media/DownloadMyPacke.PNG" width="795" height="441" alt="" /></p>
<p>Et voilà, désormais l’installation, la suppression et la mise à jour du package au sein de votre projet via Nuget sera un jeu d’enfant. </p>
<p><strong>Références :</strong></p>
<p>   &#8211; <a href="http://nuget.codeplex.com/releases/view/58939">Télécharger Nuget.exe.</a></p>
<p>   &#8211; <a href="http://docs.nuget.org/">La documentation officielle.</a>  </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
