Winform/wpf arendus viitab paratamatult paljudele kolmandate osapoolte DLL-idele, kuid iga kord, kui seda pakendada, tuleb failid Debug kaustas kliendile kopeerida või jagada, mis pole eriti mugav kasutada. Olen proovinud mitmeid tarkvarasid dll-failide ühendamiseks, näiteks ILMerge, Enigma Virtual Box jne, kuid kuni ma "Costura.Fody" kohta õppisin, tundsin, et maailm on palju parem~
Järgmine on Winformi kirjutatud programm, mis viitab kahele DLL-ile "HttpHelper.dll" ja "Newtonsoft.Json.dll"; kui me programmi genereerime, on olemas exe-fail ja need kaks DLL-faili, mis teeb inimesed väga ebamugavaks, ning kui üks DLL on vähem, võib programm teatada erandist, nagu alloleval joonisel näidatud:
Allolev link on eelmine kasutus (ei soovitata)
Kasutades Costura.Fody tööriista, saad algse DLL-i ühendada siht-EXE-ga
Projekti avaleht: https://github.com/Fody/Costura
Kuidas kasutada ja otse paigaldada nuget paketti:
Kui oled Costura.Fody edukalt lisanud, lisab lahendus automaatselt FodyWeavers.xml faili.
Kui lahendus uuesti genereerida, näed oma edu programmi genereerimise kataloogis, kõik DLL-id on täiuslikult ühendatud exe-failiga, saad exe-faili otse kliendile kopeerida, et see iseseisvalt käivitada. Nagu allpool näidatud:
1>------ Kõik ümberehitused on alanud: Projekt: itsvse, Konfiguratsioon: Siluda kõiki protsessoreid ------ 1> Fody: Fody (versioon 2.0.0.0) Täitmine 1> Fody/Costura: 'Costura.dll' kohta ei leitud ühtegi viidet. Viited ei ole muudetud. 1> Fody/Costura: 'E:\project\itsvse\itsvse\HttpHelper.dll' manustamine 1> Fody/Costura: 'E:\project\itsvse\itsvse\Newtonsoft.Json.dll' manustamine 1> Fody: Lõpetasin Fody 609ms. 1> Fody: Vahele jäi Verifying assembly, kuna see on konfiguratsioonis keelatud 1> Fody: Kinnitamine lõpetatud 3 sekundiga. 1> itsvse -> E:\project\itsvse\itsvse\bin\Debug\itsvse.exe ========== Regenereeri kõik: 1 õnnestub, 0 ebaõnnestub ja 0 ========== vahele jäetud
Nagu ülaltoodud pildilt näha, ei sisalda genereeritud fail Newtonsoft.Json.dll, HttpHelper.dll ja Costura.dll ei ole genereeritud, vaid ainult kaks faili, itsvse.exe saab otse käivitada ilma vigadeta! (PDB-faili saab kustutada).
Kasutame ILSpy tööriista, et dekompileerida meie programm ja vaatame genereeritud lähtekoodi, nagu alloleval joonisel näidatud:
Sissejuhatus rakenduspõhimõttesse
Kui CLR üritab assembleri laadida, kuid ei laadi, käivitab see AppDomain.AssemblyResolve sündmuse. Meie programm saab seda sündmust kuulata ja tagastada assembleri, mida CLR püüab sündmuste käsitlejasse laadida, et programm saaks jätkata normaalset tööd.
Fody.Costura manustab kõik EXE viidatud DLL-id EXE faili projekti ehitamisel. Kui programm kasutab üht neist DLL-idest täitmise ajal (AppDomain.AssemblyResolve sündmus käivitub, kuna CLR ei leia DLL-faili), eraldatakse vajalik DLL EXE-faili manustatud ressurssidest.
Näete, et Attach meetod kuulab AppDomain.AssemblyResolve sündmust. Kui CLR ei laadi assemblerit edukalt, käivitatakse AssemblyResolve sündmuste käsitleja. AssemblyResolve püüab saada sihtassamblee laaditud assamblee manustatud ressursilt Common.ReadFromEmbeddedResources meetodi abil ja tagastab selle CLR-ile.
Seda nähes võid küsida, millal Attach meetod kasutusele võeti?
Tegelikult peidab C# keele puhul CLR suure triki – CLR suudab enne iga mooduli (iga assembleri (iga assembleri sisaldab ühte või mitut moodulit) laadimist käivitada initsialiseeritud koodi. Kahjuks ei oma C# keel selle koodiosa üle kontrolli. Fody.Costura süstib IL-koodi otse EXE assamblee sisemise mooduli initsialiseerimisfunktsiooni ning see osa IL-koodist käivitab tegelikult Attach meetodi. Nii saab pärast EXE komplekti laadimist kohe Attach meetodit kutsuda.
Ülaltoodud on lühike sissejuhatus Fody.Costura rakenduspõhimõttesse.
Täiustatud konfiguratsioon
Need konfiguratsioonid lisatakse või muudetakse CosturaFodyWeavers.xml failides.
CreateTemporaryAssemblies Vaikimisi: vale See manustab manustatud faili kettale enne selle mällu laadimist. See on kasulik teatud olukordades, kus soovid laadida assembleri füüsilisest failist.
IncludeDebugSymbols Vaikimisi: tõeline Kontrollib, kas viitekomplekti .pdbs on samuti sisse ehitatud.
DisableCompression Vaikimisi: vale Manuskomplektid on vaikimisi tihendatud ja laadimisel pakkimata. Selle valiku abil saad kompressiooni välja lülitada. Märkus: Kindlasti lülita see omadus välja, kui viitad mittestandardsetele DLL-idele või krüpteeritud DLL-idele. Vastasel juhul võib see viia olukorrani, kus exe-d ei saa avada. See avastati, kui kasutasin DSkin.dll.
DisableCleanup Vaikimisi: vale Costura osana ei ole enam ehituses sisseehitatud komponendid. Seda puhastust saab välja lülitada.
LoadAtModuleInit Vaikimisi: tõeline Costura laaditakse vaikimisi mooduli initsialiseerimise osana. Lipp takistab käitumist. Veendu, et saad kuskil kasutada CosturaUtility.Initialize().
ExcludeAssemblies Kuidas kasutada: ExcludeAssemblies="DLL1| DLL2" Assamblee nimede nimede nimekiri, mida välistada vaikimisi toimingust "manustada kõik kopeeri kohalikud viited".
IncludeAssemblies Kuidas kasutada: IncludeAssemblies="DLL1| DLL2" Assamblee nimede nimede nimekiri, mis on kaasatud vaikimisi toimingusse Embedding All Copy Local References.
Unmanaged32Assemblies&Unmanaged64Assemblies Kuidas seda kasutada: Unmanaged32Assemblies="DLL1| DLL2" Unmanaged64Assemblies="DLL1| DLL2" Segarežiimi kokkupanekuid ei saa laadida samamoodi nagu hallatud kokkupanekuid. Seetõttu, et aidata Costural tuvastada, millised komponendid on segarežiimis ja millistes keskkondades neid laadida, tuleks nende nimed lisada ühte või mõlemasse nimekirja. Ära lisa nime .exe ega .dll.
PreloadOrder Kasutus: PreloadOrder="DLL1| DLL2" Kohalikud teegid saab Cosura automaatselt laadida. Kohaliku teegi lisamiseks lisa see oma projekti manustatud ressursina, mida nimetatakse kaustaks costura32 või costura64, sõltuvalt teegi ebastabiilsusest. Alternatiivina saad määrata eellaaditud teekide laadimisjärjekorra. Kui segad ajutisi komponente kettalt, on need samuti eellaaditud.
CosturaUtility Kuidas kasutada:
CosturaUtility on klass, mis võimaldab sul Costura süsteemi käsitsi initsialiseerida oma koodis.See kehtib peamiselt olukordades, kus mooduli initsialiseerimise programm ei tööta, nagu raamatukogud ja mono.
Lõpuks laadi alla lähtekood tekstist:
Turistid, kui soovite näha selle postituse peidetud sisu, palun Vastuse
|