2011-09-13 10 views
9

Mam 4 biblioteki DLL. Ale chcę mieć 1 pojedynczego dll, który będzie zawierał kod ze wszystkich 4 z tych bibliotek dll. Próbowałem dodać projekt i skopiować wkleić cały istniejący kod do jednego projektu, ale nie mogłem.Jak połączyć 2 lub więcej złożeń C# w 1 bibliotekę?

+0

Dodaj je jako zasobów, użyj Eksploratora rozwiązań, otwórz właściwości projektu i dodaj ponownie wymagane złożenia jako zasoby binarne –

+0

Tworzyłem bibliotekę klas (wspólne okna dialogowe). Ale znalazłem niektóre z nich, ale są one również w projekcie biblioteki klas. Dodałem je jako istniejący projekt do mojego PROJEKTU (biblioteki klas). I kiedy buduję i chcę użyj ich i muszę dodać każdy z nich do referencji. – Javidan

+0

Dodaj referencje do tych bibliotek DLL do projektu, ale w sekcji Zespoły refekcyjne projektu, wskaż je i wybierz w Edytorze właściwości dla zestawów referencyjnych "Kopiuj lokalnie: False, Embed Types: False", po prostu wczytaj em jak zwykle z osadzonego zasobu w sekcji Aplikacja tuż przed wywołaniem metody Application.Run(), gdzie te zespoły odwołują się do twojego głównego zespołu. W każdym razie możesz odwoływać się do zespołów w projekcie w czasie projektowania i nie kopiować ich wszystkich do asembleruj folder wyjściowy, zamiast tego przechowuj jako zasób w jednym ładunku zespołu, gdy ten zespół pamięci odwołuje się do –

Odpowiedz

11

Zajrzyj do ILMerge

ILMerge to narzędzie do łączenia kilku zestawów .NET w pojedynczego zestawu .NET.

+0

jak używać to ? – Javidan

+0

@Javidan Dlaczego nie chcesz po prostu osadzać biblioteki DLL jako zasobów w jednej bibliotece dll? Nie trzeba dotykać złożeń, ponieważ mogą one być podpisane i wymagają rezygnacji z powstałego zestawu po scaleniu na poziomie IL. –

+0

Nie wiem co zrobić. Zainstalowałem ilmerge, ale nie mogłem go użyć. I nie wiem, która jest wygodna i bezpieczna metoda łączenia. – Javidan

6

Można użyć ILMerge narzędzia

lub można embed the dlls you want to merge as resources

Oto próbka kodu:

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { 
    using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) 
    { 
     Byte[] assemblyData = new Byte[stream.Length]; 
     stream.Read(assemblyData, 0, assemblyData.Length); 
     return Assembly.Load(assemblyData); 
    } 
}; 
+0

Link w poście. –

+0

Zawsze miałem mnóstwo problemów, próbując załadować osadzone pliki DLL ... to było trochę za późno, ale IIRC miałem problem, nawet z 'Load (byte [])' próbowano załadować zespół z dysku. –

+0

@ pst Nie ma problemu z ładowaniem złożeń, ponieważ można je załadować we własnej domenie aplikacji i kontrolować dostęp i wersjonowanie ręcznie nad nim. I tak, złożeń podczas ładowania w domenie aplikacji, nie można ponownie załadować z dysku lub przepisane przez inny zespół, już załadowany do pamięci. Jest to zgodne z projektem. –

Powiązane problemy