Statyczne łączenie bibliotek utworzonych na C#.NET
Używam VS2008 C#.NET.
Stworzyłem 3 różne klasy bibliotek w 3 projektach. Napisałem aplikację, która korzysta z tych bibliotek (DLL).
Dzieje się tak, że każdy projekt jest kompilowany do biblioteki klas. Mam 3 dlls i 1 exe.
Zamiast tego chcę mieć je na dwa sposoby:
- Only class library assembly (dll), który zawiera 3 z nich i 1 exe.
- just one EXE (everything in it):: static linking.
Jak mogę to zrobić? Nie mogę znaleźć żadnych opcji dla statycznego łączenia w VS2008 również proszę wspomnieć o opcjach linii poleceń.
5 answers
ILMerge jest tym, czego szukasz.
Nie jestem pewien, czy naprawdę nazwałbym to "statyczne łączenie" - to po prostu łączenie kilku zespołów w jeden. (W szczególności, proszę nie odnieść wrażenia, że jest to budowanie natywnego, niezarządzanego pliku wykonywalnego.) Jednak myślę, że o to ci chodzi :)
Aktualizacja : ILMerge jest teraz open source i jest również dostępny jako pakiet NuGet :
Install-Package ilmerge
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-15 09:23:17
Możesz umieścić cały kod w jednym projekcie EXE, użyć linkera innej firmy (google . NET static linker dla wielu opcji) lub użyć ILMerge jako zilustrowanego tutaj.
Zewnętrzne łączniki zazwyczaj oferują również zaciemnianie kodu, a niektóre mogą również statycznie łączyć. NET Framework.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-08 17:19:11
Natknąłem się na to pytanie i znalazłem inną metodę osiągnięcia tych celów od Jeffreya Richtera (http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx): możesz osadzić swoje .dll do pliku wykonywalnego jako zasobu, a następnie przeciążenie zdarzenia AssemblyResolve
w celu załadowania złożenia w ten sposób. Cytując kod z linku:
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
String resourceName = "AssemblyLoadingAndReflection." +
new AssemblyName(args.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
};
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-01 20:10:32
W odniesieniu do odpowiedzi Jona Skeeta , ILRepack jest również dobrą open-source alternatywą dla ILMerge. Możesz go zainstalować z NuGet poprzez:
Install-Package ILRepack
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:51
Powinieneś również spojrzeć na ILMERGE-GUI . To opakowanie graficzne dla ILMerge.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-24 16:19:56