See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 219600|Vastuse: 43

[WinForm] .net/c# Kasuta Costura.Fodyt, et pakendada DLL EXE-sse

[Kopeeri link]
Postitatud 14.04.2018 14:41:49 | | | |
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)

C# pakendab dll-i exe programmi
http://www.itsvse.com/thread-2841-1-1.html
(Allikas: Architect_Programmer)



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, palunVastuse





Eelmine:StreamReaderi lahendus segaste märkide jaoks failide lugemisel
Järgmine:Lahendused konfliktidele Hyper-V ja VirtualBoxi ning VMware vahel
Postitatud 07.06.2018 09:35:19 |
Proovi seda meetodit, kuidas integreerida sõltuvuskomponent Dll C# kompileeritud EXE-sse!

Kui seda on lihtne kasutada, siis ära unusta seda kiita! Haha, see, lihtsalt lisa DLL ressurssifaili, lihtne ja praktiline! (Ma ei saa aru, ma suudan juhendi välja mõelda) @小渣渣

 Üürileandja| Postitatud 06.06.2018 10:30:42 |
Kui allkirjastad programmi, saad järgmise veateate:

1>MSBUILD : viga : Fody: Tekkis käsitlemata erand:
1>MSBUILD : viga : Erand:
1>MSBUILD: viga: StrongNameKeyPair avalikku võtit ei õnnestunud saada.
1>MSBUILD : viga : StackTrace:
1>MSBUILD: error: at System.Reflection.StrongNameKeyPair.ComputePublicKey()
1>MSBUILD: viga: System.Reflection.StrongNameKeyPair.get_PublicKey()
1>MSBUILD: error: in Mono.Cecil.ModuleWriter.WriteModuleTo(ModuleDefinition module, Disposable'1 stream, WriterParameters parameters)
1>MSBUILD: error: in Mono.Cecil.ModuleDefinition.Write(String fileName, WriterParameters parameters)
1>MSBUILD: error: InnerWeaver.WriteModule() positsioonis C:\projects\fody\FodyIsolated\ModuleWriter.cs: rida number 18
1>MSBUILD: error: In InnerWeaver.Execute() position C:\projects\fody\FodyIsolated\InnerWeaver.cs: real number 86
1>MSBUILD : viga : Allikas:
1>MSBUILD : error : mscorlib
1>MSBUILD : viga : TargetSite:
1>MSBUILD : error : Byte[] ComputePublicKey()
1>MSBUILD : viga :
1> Fody: Lõpetasin Fody 551ms.


Tundub, et lahendust pole, vaata artiklit:

https://github.com/Fody/ExtraConstraints/issues/5

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


Ära looda tugevatele nimedele, et end kaitsta.

Seega tundub mõttetu teha lisapingutusi, et kaitsta midagi, mis pole turvafunktsioon

 Üürileandja| Postitatud 17.04.2018 13:02:12 |
xxhh Postitatud 2018-4-17 11:35
Pärast Costura.Fody otse NuGeti sisse paigaldamist lohistasin Windows Media Playe mängija, et genereerida kaks sisseehitatud DLL-i, mida kustutada või teatada ...

Windows Media Playeri juhtnupud on com-komponendid, ma ei tea, kas "Costura.Fody" neid toetab.

1: Peaksid vaatama, kas "Costura.Fody" toetab "com-komponente"
2: Ignoreeri kahte pakendatud DLL-i, mis on seadistatud, kuidas xml-i ignoreerida, palun vaata ametlikku dokumentatsiooni detailide kohta
Postitatud 17.04.2018 10:29:52 |
Laadi alla, et näha XML-konfiguratsiooni
Postitatud 17.04.2018 10:33:34 |
Omanik tahab küsida, kas ma saan video ja dll-i kokku panna exe pluginaks
 Üürileandja| Postitatud 17.04.2018 11:16:15 |
xxhh Postitatud 2018-4-17 10:33
Omanik tahab küsida, kas ma saan video ja dll-i kokku panna exe pluginaks
...

Seda saab teha, seades video omaduseks "Manustatud ressursid" ja seejärel lugeda ressursifaili.
Postitatud 17.04.2018 11:35:51 |
Xiao Zhao postitas 2018-4-17 11:16
Seda saab teha, seades video omaduseks "Manustatud ressursid" ja seejärel lugeda ressursifaili. ...

Pärast Costura.Fody paigaldamist vs NuGetis lohistasin Windows Media Playe mängija ja tegin kaks sisseehitatud DLL-i, et kustutada või vea teatada  
Postitatud 17.04.2018 11:57:09 |
Kas XML-i tuleb ikka seadistada?     
Postitatud 17.04.2018 17:42:31 |
Xiao Zhao postitas 2018-4-17 11:16
Seda saab teha, seades video omaduseks "Manustatud ressursid" ja seejärel lugeda ressursifaili. ...

Üürileandja või mina, tahaksin küsida, panen video manustatud ressurssi, sealt loeb baitide massiivi, kas on mingit võimalust see mängijasse panna ja otse mängida (ma ei taha kirjutada kohalikule, et lugemisrajal mängida, video on rohkem kui suur kaart)
 Üürileandja| Postitatud 17.04.2018 20:52:16 |
xxhh Postitatud 2018-4-17 17:42
Üürileandja või mina, ma tahan küsida, ma panen video manustatud ressurssi ja sealt loeb baitide massiv, kas on mingit võimalust see mängijasse panna ja otse mängida ( ...

Ei ole soovitatav teha suurt videot ressursifailiks, saad vaadata, kas mängijal on veel mõni viis otse baitide kaudu edasi anda[]
Postitatud 18.04.2018 08:08:48 |
Xiao Zhazha postitatud 2018-4-17 20:52
Ei ole soovitatav teha suurt videot ressurssifailiks, saad vaadata, kas mängijal on veel mõni viis otse baitide kaudu edasi liikuda[] ...

Ükski neist ei loe videokõnesid ega taha küsida, millised head ideed sul on
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com