Osobiście preferuję, kiedy aplikacje składają się z pojedynczego pliku wykonywalnego – czysta wygoda i kompaktowość.
Jednakże, przy standardowej pracy ze stacjonarnymi aplikacjami .NET często wynikiem ich kompilacji jest całe stado plików dll i jeden (bądź więcej) plik exe.
Oczywiście wcale nie musi tak być – możemy spokojnie zastąpić cały zestaw zależności pojedynczym plikiem exe.
Opcji mamy kilka:
- Costura.Fody
- ILMerge
- Mono.Cecil
Wszystkie mają swoje zastosowania przy projektach określonego rodzaju.
Costura.Fody
Jest najprostszym w użyciu narzędziem – wystarczy dodać NuGet package do projektu aplikacji i gotowe.
Automatycznie wszystkie używane przez dany projekt biblioteki zostaną wpisane w plik wykonywalny.
Dodatkowo warto wykorzystać komendę powershella “Install-CleanReferencesTarget”, aby folder bin czyścił się ze zbędnych już plików dll.
ILMerge
Jest małym narzędziem w formie pliku exe.
Sprawdza się w sytuacjach, kiedy nie możemy skorzystać z Fody.
Np. w poprzednim poście wspominałem, że ClojureCLR generuje pliki dll w stosunku 1:1 z plikami clj.
Więc aby skorzystać z całego silnika RL-Engine musielibyśmy dodać wpierdyliard referencji.
Fody odpada tutaj, bo kompilujemy kod zewnętrznym narzędziem.
Skorzystajmy zatem z ILMerge aby zamienić nasz zestaw dll na pojedynczą bibliotekę:
ILMerge.exe /out:"rl-engine.dll" "*.dll" /target:library /targetplatform:v2,C:\Windows\Microsoft.NET\Framework\v2.0.50727 /wildcards
PS: w tym przypadku załączamy również cały Clojure runtime (paczkę NuGetową z ClojureCLR), więc nasza biblioteka jest w pełni samowystarczalna.
Mono.Cecil
Analogiczne narzędzie do ILMerge.
Dużym plusem jest to, że wspiera Mono (obviously) i jest open source.
Niestety z Cecilem nie miałem przyjemności pracować.
Im mniej tym lepiej
Warto pamiętać, że istnieje możliwość pozbycia się całej chmary plików – szczególnie przy tworzeniu narzędzi czy aplikacji desktopowych.
Z kolei dla aplikacji webowych czy bardziej zaawansowanych systemów, jest to raczej zbędny feature.
Be First to Comment