<?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>Benjamin Devuyst &#187; multiple</title>
	<atom:link href="https://blog.developpez.com/bdevuyst/ptag/multiple/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/bdevuyst</link>
	<description>:)</description>
	<lastBuildDate>Mon, 16 Mar 2020 06:57:16 +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>Multi solution Visual Studio et dépendances</title>
		<link>https://blog.developpez.com/bdevuyst/p11860/dotnet-net/multi-solution-visual-studio-et-dependances</link>
		<comments>https://blog.developpez.com/bdevuyst/p11860/dotnet-net/multi-solution-visual-studio-et-dependances#comments</comments>
		<pubDate>Tue, 26 Mar 2013 09:51:57 +0000</pubDate>
		<dc:creator><![CDATA[benji_dv]]></dc:creator>
				<category><![CDATA[ALM]]></category>
		<category><![CDATA[DotNet - .net]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[big]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[complex]]></category>
		<category><![CDATA[foundation]]></category>
		<category><![CDATA[large]]></category>
		<category><![CDATA[multiple]]></category>
		<category><![CDATA[muti]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[projets]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[solution]]></category>
		<category><![CDATA[team]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/bdevuyst/?p=56</guid>
		<description><![CDATA[Les projets informatiques de taille conséquentes sont notre quotidien (refonte de SI, utilisation de nombreuses interfaçages extérieur au projet initial, etc). Si on ajoute le respect des bonnes pratiques (ex : couplage faible entre couches &#62; l&#8217;utilisation de mécaniques d&#8217;injections de dépendances &#8211; en d&#8217;autres termes, Article sur les IOC), On obtient des fichiers solutions Visual Studio dont le nombre de projet excède largement la douzaine projets&#8230; ce billet propose juste une piste de travail [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Les projets informatiques de taille conséquentes sont notre quotidien (refonte de SI, utilisation de nombreuses interfaçages extérieur au projet initial, etc).<br />
Si on ajoute le respect des bonnes pratiques (ex : couplage faible entre couches &gt; l&rsquo;utilisation de mécaniques d&rsquo;injections de dépendances &#8211; en d&rsquo;autres termes, <a href="http://philippe.developpez.com/articles/dotnet/injectiondedependances/" title="Article sur les IOC">Article sur les IOC</a>),</p>
<p>On obtient des fichiers solutions Visual Studio dont le nombre de projet excède largement la douzaine projets&#8230;</p>
<p>ce billet propose juste une piste de travail pour ce genre de problématiques&#8230;</p>
<p>Or, d&rsquo;après les cahiers blancs MS (<a href="http://tfsguide.codeplex.com/" title="Un bon guide de mise en place des pratiques TFS">Un bon guide de mise en place des pratiques TFS</a>), des fichiers SLN de plus d&rsquo;une douzaine de projet ont des conséquences fâcheuses sur le projet :<br />
 &#8211; Absence d&rsquo;optimisation des assemblies à la compilation, (je confirme)<br />
 &#8211; Temps de compilations excessifs sur les machines des développeurs  (je confirme)<br />
 &#8211; Temps de compilations excessifs sur les agents de builds (intégration continue),  (je confirme)<br />
 &#8211; Piètre performance au chargement de la solution  (je confirme)<br />
 &#8211; &#8230;</p>
<p>La solution consiste à considérer les stratégies décrites dans le cahier blanc, pour éventuellement aboutir sur un Multi SLN.<br />
Exemple :<br />
 &#8211; SLN1 : Projets totalement indépendants des projets de la solution (drivers, API client de partenaires extérieurs, API commune à l&rsquo;entreprise)<br />
 &#8211; SLN2 : Projets de la couche de services, la DAL, etc.<br />
 &#8211; SLN3 : Projets propres à la couche de présentation</p>
<p>L&rsquo;exemple ci-dessus est une stratégie, d&rsquo;autres stratégies existent.</p>
<p>La règle, en termes de références entre projets, est la suivante : tous les projets situés au sein du même SLN peuvent se référencer entre eux, les liens entre projets de solutions différentes doivent se réaliser par DLL.<br />
Dès lors, les outputs des projets des solutions (excepté celle de présentation) doivent être archivées (par solution) afin de ne pas forcer les développeur à devoir régénérer toutes les SLN lorsqu&rsquo;un autre membre de l&rsquo;équipe modifie une couche intermédiaire.<br />
En d&rsquo;autres termes :<br />
 &#8211; les outputs des projets de la SLN1 sont redirrigés en postBuild Event vers un répertoire (ex : $SlnRoot\_Build-SLN1) puis archivés.<br />
 &#8211; les outputs des projets de la SLN2 sont redirrigés en postBuild Event vers un répertoire (ex : $SlnRoot\_Build-SLN2) puis archivés.</p>
<p>La commande xcopy à placer dans le postBuild Event du projet est la suivante :<br />
   xcopy /E /Y /D /R &laquo;&nbsp;$(TargetDir)*.*&nbsp;&raquo; &laquo;&nbsp;$(SolutionDir)_Build-SLN-1-[SlnName]&nbsp;&raquo;</p>
<p>/E : Copie les répertoires et sous-répertoires, y compris les répertoires vides<br />
/Y : Supprime la demande de confirmation de remplacement de fichiers de destination existants<br />
/D : Copie les fichiers modifiés à partir de la date spécifiée. Si aucune date n&rsquo;est donnée, copie uniquement les fichiers dont l&rsquo;heure source est plus récente que l&rsquo;heure de destination<br />
/R : Remplace les fichiers en lecture seule</p>
<p>La dernière option est très importante, car les dll&rsquo;s de destination sont en Read Only (puisque archivées sur TFS)&#8230; Sans le /R, on peut avoir des erreurs comme :<br />
Error	3	The command &laquo;&nbsp;xcopy /E /Y /D &laquo;&nbsp;E:\DEV\&#8230;\MonProjet\bin\Debug\*.*&nbsp;&raquo; &laquo;&nbsp;E:\DEV\_Build-SLN-1-SlnName&nbsp;&raquo; &#8230; exited with code 4.</p>
<p>Astuce : Pour vérifier le message d&rsquo;erreur réel : copier la commande remontée par Visual Studio lors des erreurs de build liées à xcopy dans une invite de commande et l&rsquo;exécuter !</p>
<p>Un dernier point : Si vous êtes confronté à ces problèmes de solutions complexes, je vous invite à<br />
 &#8211; lire le document cité ci dessus afin d&rsquo;élaborer une stratégie de multi SLN (non trivial),<br />
 &#8211; échanger avec les membres de l&rsquo;équipe, car en définitive ce sont eux qui exploiteront les SLNs !</p>
<p>Enjoy !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
