2009-12-10 4 views
9

J'ai une application Web ASP.NET développée dans Visual Studio 2008, composée de 3 projets différents (un pour l'interface utilisateur, un pour BO et le troisième pour DAL).Visual Studio 2008: Création de DLL unique à partir de plusieurs projets

Comment puis-je générer un seul fichier d'assemblage qui contient tous les 3? Maintenant, il génère 3 DLLs pour chaque projet dans la solution.

+0

Est-ce pas ce genre de défaite dans le but d'avoir un projet n-tier? – slugster

+2

Peut-être pour faciliter le déploiement? –

+1

Et la distribution aussi. –

Répondre

17

Pour chacun de vos projets ou créer un netmodule un assemblage et les compiler/fusionner tout en un seul ensemble.

Première alternative. Cela a été proposé par Jay R. Wren:

c'est un hack mignon, mais avec la CSC et VBC à la fois soutenir les /target:module et /addmodule les options, vous pouvez réellement faire sans ILMerge en utilisant simplement un script shell ou faites un fichier. Visual Studio ne prend pas en charge le type «netmodule», contrairement à MSBuild.

Ajoutez le projet VB à votre solution. Déchargez le projet et modifiez le fichier de projet.

changement OutputType au module:

<OutputType>module</OutputType> 

Au lieu d'ajouter une référence au projet souhaité, on ajoute un module. Malheureusement, encore une fois VStudio échoue ici, mais MSBUILD fonctionne très bien. Déchargez le projet et modifiez le fichier de projet. Ajoutez un groupe d'articles avec des directives d'inclusion AddModules.

<ItemGroup><AddModules Include="..\VbXml\bin\Debug\VbXml.netmodule" /></ItemGroup> 

Cela dira msbuild de dire le SCC d'utiliser /addmodule directives, tout comme le groupe d'articles de référence qui Studio ne gérer. Inconvénient majeur: aucun Intellisense de Visual Studio pour le module ajouté.

Nous avons déjà des références, c'est dommage que nous n'ayons pas de modules. [MISE À JOUR: Comme @Ark-kun souligné ailleurs, Visual Studio peut faire référence .netmodule projets et avoir Intellisense. Ajoutez simplement la référence du projet AVANT de changer le type de sortie.]

SharpDevelop a la première étape, mais la deuxième étape, un gui "Ajouter un module" a été ouvert en tant qu'élément de basse priorité depuis SD 2.0.

Deuxième manière. Ce great article (par Scott Hanselman) décrit comment configurer automatiquement des assemblys si vous utilisez Visual Studio. Il ne vous donner un soutien IntelliSense , contrairement à la première alternative .

troisième voie. Faites-le manuellement avec scs.
Exemple comment créer plusieurs modules et le thème de la liaison en une seule dll:

csc /t:module RarelyUsedTypes.cs 
csc /out:AllTypes.dll /t:library /addmodule:RarelyUsedTypes.netmodule AllTypes.cs 

Pour plus d'informations, voir le livre de Richter CLR via C#.

+1

Les trois manières produisent un seul assemblage. Mais seulement la seconde façon vous donne un seul ** fichier **. –

Questions connexes