ILMerge Best Practices

hlasů
66

Používáte ILMerge? Používáte ILMerge sloučit více sestav pro usnadnění nasazení DLL? Našli jste problémy se nasazení / verzí ve výrobě po ILMerging sestav dohromady?

Sháním nějakou radu v souvislosti s pomocí ILMerge snížit nasazení tření, je-li to vůbec možné.

Položena 13/08/2008 v 02:05
zdroj uživatelem
V jiných jazycích...                            


12 odpovědí

hlasů
39

Úvod

Tento příspěvek ukazuje, jak nahradit všechny .exe + .dll filess jedinou combined .exe. To také udržuje ladění .pdbsouboru neporušená.

Pro konzoli Apps

Zde je základní Post Build Stringpro Visual Studio 2010 SP1, pomocí .NET 4.0. Stavím konzolový exe se všemi soubory sub-DLL obsažených v něm.

"$(SolutionDir)ILMerge\ILMerge.exe" /out:"$(TargetDir)$(TargetName).all.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll" /target:exe /targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /wildcards

Základní rady

  • Výstupem je soubor „ AssemblyName.all.exe“, který v sobě spojuje všechny dílčí knihovny DLL do jednoho exe.
  • Všimněte si, že ILMerge\adresář. Musíte buď zkopírovat nástroj ILMerge do adresáře řešení (takže můžete distribuovat zdroje, aniž by se museli starat o dokumentující instalaci ILMerge), nebo změnit tuto cestu k bodu, kde ILMerge.exe zdržuje.

Pokročilá rady

Máte-li problémy s to nefunguje, zapněte Outputa vyberte Show output from: Build. Zkontrolovat přesný příkaz, který Visual Studio skutečně vyrobené a kontrolu chyb.

Vzorek Build Script

Tento skript nahradí vše .exe + .dll filess jediným combined .exe. To také vede k ladění PDB soubor beze změny.

Chcete-li použít, vložte do vašeho Post Buildkroku, pod Build Eventskartě v C # projektu, a ujistěte se, že jste nastavit cestu v první řadě poukázat na ILMerge.exe:

rem Create a single .exe that combines the root .exe and all subassemblies.
"$(SolutionDir)ILMerge\ILMerge.exe" /out:"$(TargetDir)$(TargetName).all.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll" /target:exe /targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /wildcards
rem Remove all subassemblies.
del *.dll
rem Remove all .pdb files (except the new, combined pdb we just created).
ren "$(TargetDir)$(TargetName).all.pdb" "$(TargetName).all.pdb.temp"
del *.pdb
ren "$(TargetDir)$(TargetName).all.pdb.temp" "$(TargetName).all.pdb"
rem Delete the original, non-combined .exe.
del "$(TargetDir)$(TargetName).exe"
rem Rename the combined .exe and .pdb to the original project name we started with.
ren "$(TargetDir)$(TargetName).all.pdb" "$(TargetName).pdb"
ren "$(TargetDir)$(TargetName).all.exe" "$(TargetName).exe"
exit 0
Odpovězeno 20/03/2012 v 11:23
zdroj uživatelem

hlasů
37

Používám ILMerge pro téměř všechny své různých aplikací. Mám ji integrovat přímo do procesu sestavení uvolnění, takže to, co jsem skončit s jedním exe jednu aplikaci s žádné další DLL.

Nemůžete ILMerge žádnou C ++ sestavy, které mají nativní kód. Také nelze ILMerge jakýchkoli dílů, které obsahují XAML pro WPF (alespoň jsem neměl žádný úspěch s tím). Stěžuje za běhu, že prostředky nelze nalézt.

Udělal jsem napsat obálky spustitelný ILMerge kde jsem se projít ve spouštěcím názvu exe pro projekt chci sloučit, a výstupní název exe, a pak to odráží závislých sestavy a volání ILMerge s příslušnými parametry příkazového řádku. Je to mnohem jednodušší, teď, když jsem přidat nové sestavy projektu, nemám na paměti, aktualizovat build skriptu.

Odpovězeno 29/08/2008 v 07:00
zdroj uživatelem

hlasů
9

Používáme ILMerge na bloky aplikace Microsoft - namísto 12 oddělené DLL soubory, máme jednotný soubor, který můžeme nahrát na naše klientské oblasti, a struktura Souborový systém je mnohem krásnější.

Po sloučení souborů, jsem musel upravit vizuální přehled studiový projekt, odstraňte 12 oddělené assmeblies a přidat jeden soubor jako referenci, jinak by si stěžují, že nemohl najít konkrétní sestavu. Im ne příliš jistý, jak by to fungovalo na příspěvek nasazení však může být stojí za to dávat to zkusit.

Odpovězeno 14/08/2008 v 14:00
zdroj uživatelem

hlasů
6

Vím, že to je stará otázka, ale nemůžeme používat jen ILMerge snížit počet závislostí, ale i internalizovat „vnitřní“ závislostí (např automapper, restsharp, atd), které jsou využívány nástroje. To znamená, že jsou zcela abstrahuje pryč, a tento projekt pomocí sloučené nástroj nepotřebuje vědět o nich. To opět snižuje potřebné odkazy v rámci projektu, a umožňuje používat / aktualizovat svou vlastní verzi stejné vnější knihovny v případě potřeby.

Odpovězeno 03/11/2012 v 02:53
zdroj uživatelem

hlasů
3

Používáme ILMerge na poměrně málo projektů. Web Service Software Factory , například vyrábí něco podobného 8 montážních jeho výstupu. My spojit všechny tyto dll do jediné DLL, takže hostitelská služba bude mít jen odkazovat jeden DLL.

To dělá život o něco jednodušší, ale to není velký problém, a to buď.

Odpovězeno 13/08/2008 v 05:31
zdroj uživatelem

hlasů
2

Měli jsme stejný problém s kombinováním WPF závislostí .... ILMerge nezdá se vypořádat s nimi. Costura.Fody fungovalo perfektně pro nás však a trvalo asi 5 minut dostat se ... velmi dobrou zkušenost.

Stačí nainstalovat s nuget (výběr správného výchozí projekt v konzole Správce Package). Zavádí se do cílového projektu a výchozí nastavení okamžitě pracoval pro nás.

Slučuje se všechny dll s označením „Místní kopie“ = true a vytváří sloučené .exe (vedle standardní výstup), což je pěkně zmenšeny (mnohem menší než celková velikost výstupu).

Licence je MIT as, takže si můžete upravit / distribuovat podle potřeby.

https://github.com/Fody/Costura/

Odpovězeno 13/04/2016 v 14:16
zdroj uživatelem

hlasů
1

Všimněte si, že pro Windows GUI programů (např winform) budete chtít použít / cíl: winexe spínače.
Adresáři / target: exe switch vytváří sloučený s konzolovou aplikaci.

Odpovězeno 28/02/2017 v 13:36
zdroj uživatelem

hlasů
1

Narazili jsme na problémy při slučování dll, které mají prostředky ve stejném jmenném prostoru. V procesu slučování jeden z oborů názvů zdrojů byl přejmenován, a proto nemohly být umístěny zdroje. Možná jsme jen něco špatně tam stále vyšetřuje problém.

Odpovězeno 19/08/2009 v 12:43
zdroj uživatelem

hlasů
0

Jsem teprve začíná používat ILMerge jako součást mé CI sestavení kombinovat spoustu jemnozrnných WCF smluv do jediné knihovny. Funguje to velmi dobře, nicméně nový sloučený lib nelze snadno koexistovat s jeho dílčích knihoven nebo jinými knihovnami, které jsou závislé na těchto knihoven komponent.

Pokud se v novém projektu, odkazovat jak vaše ILMerged lib a také starší knihovnu, která závisí na jeden ze vstupů vám dal ILMerge, zjistíte, že nemůžete projít jakýkoliv typ z ILMerged lib jakýmkoliv způsobem v dědictví knihovny, aniž by dělali nějaký typ mapování (např automapper nebo manuální mapování). Je to proto, že jakmile se všechno sestavil, druhy jsou účinně kvalifikoval s názvem sestavy.

Jména budou také srazí, ale můžete napravit pomocí extern alias .

Moje rada by byla, aby se zabránilo i ve sloučené sestavě jakékoliv veřejně dostupné lib, že vaše sloučené montážní vystavuje (například prostřednictvím typ návrat metoda / konstruktér parametr, pole, vlastnictví, generic ...), pokud nevíte jistě, že je uživatel sloučeného montáž není a nikdy nebude záviset na volně stojící verze stejné knihovny.

Odpovězeno 29/04/2016 v 18:29
zdroj uživatelem

hlasů
0

Nedávno jsem měl problém, kdy jsem ilmerged sestavy v sestavě jsem měl některé třídy byly tyto volána přes odraz v šestiboký opensource CMS.

Informace k uskutečnění hovoru pomocí odrazu byl převzat z db tabulky, který měl název assembly a jmenný prostor třídy, která implementována a rozhraní. Otázkou bylo, že odraz volání by selhat při dll byla sloučena il takže pokud dll bylo oddělit to všechno fungovalo dobře. Myslím, že problém může být podobná jedné longeasy má?

Odpovězeno 30/07/2010 v 15:35
zdroj uživatelem

hlasů
0

Právě jsme začali používat ILMerge v našich řešení, která jsou přerozdělovány a použitých v našich dalších projektů, a zatím je vše dobré. Vše se zdá fungovat v pořádku. Dokonce jsme zatemnil baleného sestavu přímo.

Uvažuje se dělají totéž s agregáty MS Enterprise knihovny.

Jediný skutečný problém vidím s ním je verzování jednotlivých sestav z balíku.

Odpovězeno 14/08/2008 v 14:04
zdroj uživatelem

hlasů
-1

Zdá se mi, jako # 1 ILMerge Best Practice je Nepoužívat ILMerge. Místo toho použijte SmartAssembly . Jedním z důvodů je to, že # 2 ILMerge Best Practice je vždy běh PEVerify poté, co dělat ILMerge, protože ILMerge nezaručuje, že bude správně sloučit sestavy do platný spustitelný.

Ostatní ILMerge nevýhody:

  • Při slučování, že pásy XML Komentáře (když jsem se staral o to, já bych použít nástroj pro mlžení)
  • to nezpracovává správně vytvořit odpovídající soubor PDB

Dalším nástrojem, stojí za to věnovat pozornost, je Mono.Cecil a Mono.Linker [2] Nástroj.

[2]: http: // www.mono-project.com/Linker

Odpovězeno 24/08/2010 v 22:14
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more