2009-12-10 8 views
9

Mam aplikację internetową ASP.NET opracowaną w Visual Studio 2008, złożoną z 3 różnych projektów (jeden dla interfejsu użytkownika, jeden z BO, a trzeci dla DAL).Visual Studio 2008: Tworzenie pojedynczej biblioteki DLL z rozwiązania z wieloma projektami

Jak wygenerować pojedynczy plik zespołu, który zawiera wszystkie 3? Teraz generuje 3 DLL'y dla każdego projektu w rozwiązaniu.

+0

Czy ten rodzaj pokonywania nie jest celem projektu n-warstwowego? – slugster

+2

Może być dla łatwości wdrożenia? –

+1

I dystrybucji również. –

Odpowiedz

17

dla każdego z projektów utworzenia netmodule lub zespół i kompilacji/połączyć je wszystkie w jednym zespole.

Pierwsza alternatywa. został Proponowana przez Jay R. Wren:

To jest słodkie hack, ale z CSC i VBC zarówno wspieranie /target:module i /addmodule opcje, można rzeczywiście zrobić to bez ILMerge tylko za pomocą skryptu powłoki lub zrób plik.

Visual Studio nie obsługuje typu "netmoduł", ale MSBuild ma.

Dodaj projekt VB do swojego rozwiązania. Rozładuj projekt i edytuj plik projektu.

Zmień OutputType do modułu:

<OutputType>module</OutputType> 

Zamiast dodanie odniesienia do żądanego projektu, dodajemy moduł. Niestety, ponownie VStudio nie działa tutaj, ale MSBUILD działa dobrze. Rozładuj projekt i edytuj plik projektu. Dodaj grupę produktów z AddModules obejmują dyrektywy.

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

Dzięki temu dowiesz msbuild powiedzieć CSC używać /addmodule dyrektyw, podobnie jak Referencyjnego Group, która Studio udaje.

Główna wada: brak programu Visual Studio Intellisense dla dodanego modułu. Mamy już referencje, szkoda, że ​​nie mamy modułów. [AKTUALIZACJA: Jako @Ark-kun wskazano gdzie indziej, Visual Studio może odwoływać się do projektów .netmodule i mieć Intellisense. Wystarczy dodać referencję projektu PRZED zmianą typu wyjściowego.]

SharpDevelop ma pierwszy krok, ale w drugim kroku gui "Dodaj moduł" zostało otwarte jako element o niskim priorytecie od SD 2.0.

Drugi sposób. Ten numer great article (autorstwa Scotta Hanselmana) opisuje, jak automatycznie mega zgrupować złożenia, jeśli używasz programu Visual Studio. To ma daje wsparcie IntelliSense , w przeciwieństwie do pierwszej alternatywy .

Trzeci sposób. Zrób to ręcznie za pomocą scs.
Przykład jak utworzyć kilka modułów i połączyć w jeden motyw dll:

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

Więcej informacji można znaleźć książkę Richtera CLR via C#.

+1

Wszystkie trzy sposoby tworzą pojedynczy zespół. Ale tylko drugi sposób daje pojedynczy plik **. –