Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 219600|Atbildi: 43

[WinForm] .net/c# Izmantojiet Costura.Fody, lai iepakotu DLL EXE

[Kopēt saiti]
Publicēts 14.04.2018 14:41:49 | | | |
Winform/wpf izstrāde neizbēgami attiecas uz daudziem trešo pušu DLL, bet katru reizi, kad to iesaiņojat, jums ir jākopē atkļūdošanas direktorijā esošie faili klientam vai jākoplieto tie, kas nav ļoti ērti lietojami. Es iepriekš esmu izmēģinājis vairākas programmatūras, lai apvienotu dll failus, piemēram, ILMerge, Enigma Virtual Box utt., bet, kamēr es uzzināju par "Costura.Fody", es jutu, ka pasaule ir daudz labāka ~

Šī ir Winform rakstīta programma, atsaucoties uz diviem DLL "HttpHelper.dll" un "Newtonsoft.Json.dll", kad mēs ģenerējam programmu, būs exe fails un šie divi DLL faili, kas liek cilvēkiem justies ļoti neērti, un, ja ir viens mazāk DLL, programma var ziņot par izņēmumu, kā parādīts zemāk redzamajā attēlā:



Zemāk esošā saite ir iepriekšējais lietojums (nav ieteicams)

C# iesaiņo dll exe programmā
http://www.itsvse.com/thread-2841-1-1.html
(Avots: Architect_Programmer)



Izmantojot rīku Costura.Fody, varat apvienot avota DLL mērķa EXE

Projekta mājaslapa: https://github.com/Fody/Costura

Kā lietot, tieši instalējiet nuget paketi:



Kad esat veiksmīgi pievienojis Costura.Fody, risinājums automātiski pievienos FodyWeavers.xml failu.

Atjaunojiet risinājumu, jūs varat redzēt savus panākumus programmas ģenerēšanas direktorijā, visi DLL ir lieliski apvienoti exe, jūs varat tieši kopēt exe failu klientam, lai tas darbotos neatkarīgi. Kā parādīts zemāk:

1>------ Visi pārbūvējumi ir sākti: Projekts: itsvse, Konfigurācija: Atkļūdot jebkuru CPU ------
1> Fody: Fody (versija 2.0.0.0) Izpilde
1> Fody/Costura: Atsauce uz "Costura.dll" nav atrasta. Atsauces nav modificētas.
1> Fody/Costura: "E:\project\itsvse\itsvse\HttpHelper.dll" iegulšana
1> Fody/Costura: "E:\project\itsvse\itsvse\Newtonsoft.Json.dll" iegulšana
1> Fody: Pabeigts Fody 609ms.
1> Fody: izlaista montāžas pārbaude, jo tā ir atspējota konfigurācijā
1> Fody: pabeigta verifikācija 3 ms.
1> itsvse -> E:\project\itsvse\itsvse\bin\Debug\itsvse.exe
========== Atjaunot visu: 1 izdodas, 0 neizdodas un 0 ========== izlaists





Kā redzams no iepriekš redzamā attēla, ģenerētais fails nesatur Newtonsoft.Json.dll, HttpHelper.dll un Costura.dll netiek ģenerēti, tikai divi faili, itsvse.exe var palaist tieši bez kļūdām! (PDB failu var izdzēst).

Izmantosim ILSpy rīku, lai dekompilētu mūsu programmu un apskatītu ģenerēto avota kodu, kā parādīts zemāk redzamajā attēlā:



Ievads īstenošanas principā

Kad CLR mēģina ielādēt montāžu, bet neizdodas ielādēt, tiek parādīts notikums AppDomain.AssemblyResolve. Mūsu programma var noklausīties šo notikumu un atgriezt montāžu, ko CLR mēģina ielādēt notikumu apdarinātājā, lai programma varētu turpināt normāli darboties.

Veidojot projektu, Fody.Costura iegulst visus DLL, uz kuriem atsaucas EXE, EXE failā. Ja programma izpildes laikā izmanto kādu no šiem DLL (notikums AppDomain.AssemblyResolve tiek aktivizēts, jo CLR nevar atrast DLL failu), nepieciešamais DLL tiek izvilkts no EXE faila iegultajiem resursiem.


Varat redzēt, ka pievienošanas metode klausās notikumu AppDomain.AssemblyResolve. Ja CLR neizdodas veiksmīgi ielādēt montāžu, tiek izpildīts notikumu apdarinātājs AssemblyResolve. AssemblyResolve mēģina iegūt mērķa montāžu no ielādētās montāžas iegultā resursa, izmantojot metodi Common.ReadFromEmbeddedResources, un atgriež to CLR.

Redzot to, jūs varat jautāt, kad tika ieviesta Attach metode?

Patiesībā C# valodā CLR slēpj lielu triku - CLR var izpildīt kādu inicializētu kodu pirms katra moduļa ielādes (katrā komplektā ir viens vai vairāki moduļi). Diemžēl C# valoda nekontrolē šo koda daļu. Fody.Costura ievada IL kodu tieši EXE montāžas iekšējā moduļa inicializācijas funkcijā, un šī IL koda daļa faktiski izpilda Attach metodi. Tādā veidā, kad EXE montāža ir ielādēta, Attach metodi var izsaukt nekavējoties.

Iepriekš minētais ir īss ievads Fody.Cotura ieviešanas principā.


Papildu konfigurācija

Šīs konfigurācijas tiek pievienotas vai modificētas CosturaFodyWeavers.xml failos.

Izveidot pagaidu montāžas
Noklusējums: false
Tādējādi iegultais fails tiek iegults diskā pirms tā ielādes atmiņā. Tas ir noderīgi noteiktos scenārijos, kad vēlaties ielādēt montāžu no fiziska faila.

IncludeDebugSymbols
Noklusējums: true
Kontrolē, vai ir iegulti arī atsauces komplekta .pdbs.

Atspējot saspiešanu
Noklusējums: false
Iegultie komplekti tiek saspiesti pēc noklusējuma un nesaspiesti, kad tie tiek ielādēti. Izmantojot šo opciju, varat izslēgt saspiešanu.
Piezīme: Noteikti izslēdziet šo rekvizītu, atsaucoties uz nestandarta DLL vai šifrētiem DLL. Pretējā gadījumā tas novedīs pie situācijas, ka exe nevar atvērt. Tas tika atklāts, lietojot DSkin.dll.

Atspējot tīrīšanu
Noklusējums: false
Kā daļa no Costura, iegultie komponenti vairs nav iekļauti būvējumā. Šo tīrīšanu var izslēgt.

LoadAtModuleInit
Noklusējums: true
Costura pēc noklusējuma tiek ielādēts kā daļa no moduļa inicializācijas. Karodziņš atspējo darbību. Pārliecinieties, vai varat izmantot CosturaUtility.Initialize() kaut kur.

Izslēgt montāžas
Kā lietot: ExcludeAssemblies="DLL1| DLL2"
Komplektu nosaukumu saraksts, kas jāizslēdz no noklusējuma darbības "iegult visas lokālās atsauces kopijas".

IncludeAssemblies
Kā lietot: IncludeAssemblies="DLL1| DLL2"
To montāžu nosaukumu saraksts, kas iekļauti noklusējuma darbībā Visu lokālo atsauču iegulšana.

Unmanaged32Assemblies&Unmanaged64Assemblies
Kā to izmantot: Unmanaged32Assemblies="DLL1| DLL2" Unmanaged64Assemblies="DLL1| DLL2"
Jauktā režīma komplektus nevar ielādēt tāpat kā pārvaldītos komplektus. Tāpēc, lai palīdzētu Costura identificēt, kuri komponenti ir jauktā režīmā un kādā vidē tos ielādēt, to nosaukumi ir jāiekļauj vienā vai abos sarakstos. Nosaukumā neiekļaujiet .exe vai .dll.

Iepriekšēja ielādePasūtījums
Lietojums: PreloadOrder="DLL1| DLL2"
Vietējās bibliotēkas var automātiski ielādēt Costura. Lai iekļautu lokālo bibliotēku, iekļaujiet to projektā kā iegultu resursu, ko sauc par mapi costura32 vai costura64 atkarībā no bibliotēkas nestabilitātes. Varat arī norādīt ielādes secību, kādā tiek ielādētas iepriekš ielādētās bibliotēkas. Sajaucot pagaidu komponentus no diska, tie ir arī iepriekš ielādēti.

CosturaUtility
Kā lietot:




CosturaUtility ir klase, kas ļauj manuāli inicializēt Costura sistēmu savā kodā.Tas galvenokārt attiecas uz scenārijiem, kad moduļa inicializācijas programma nedarbojas, piemēram, bibliotēkas un Mono.


Visbeidzot, lejupielādējiet avota kodu tekstā:

Tūristi, ja vēlaties redzēt šīs ziņas slēpto saturu, lūdzuAtbildi





Iepriekšējo:StreamReader risinājums izkropļotām rakstzīmēm, lasot failus
Nākamo:Risinājumi konfliktiem starp Hyper-V un VirtualBox un VMware
Publicēts 07.06.2018 09:35:19 |
Izmēģiniet šo metodi par atkarības komponenta Dll integrēšanu C# kompilētajā EXE!

Ja to ir viegli lietot, neaizmirstiet to uzslavēt! Haha, tas, vienkārši pievienojiet Dll resursu failam, vienkārši un praktiski! (Es nesaprotu, es varu nākt klajā ar apmācību) @小渣渣

 Saimnieks| Publicēts 06.06.2018 10:30:42 |
Ja parakstāt programmu, tiek parādīts šāds kļūdas ziņojums:

1>MSBUILD: kļūda: Fody: radās neapstrādāts izņēmums:
1>MSBUILD: kļūda: Izņēmums:
1>MSBUILD: kļūda: nevar iegūt StrongNameKeyPair publisko atslēgu.
1>MSBUILD: kļūda: StackTrace:
1>MSBUILD: kļūda: pie System.Reflection.StrongNameKeyPair.ComputePublicKey()
1>MSBUILD: kļūda: System.Reflection.StrongNameKeyPair.get_PublicKey()
1>MSBUILD: kļūda: Mono.Cecil.ModuleWriter.WriteModuleTo(ModuleDefinition modulis, vienreizlietojams'1 straume, WriterParameters parametri)
1>MSBUILD: kļūda: Mono.Cecil.ModuleDefinition.Write(String fileName, WriterParameters parametri)
1>MSBUILD: kļūda: InnerWeaver.WriteModule() pozīcijā C:\projects\fody\FodyIsolated\ModuleWriter.cs: rindas numurs 18
1>MSBUILD: kļūda: InnerWeaver.Execute() pozīcijā C:\projects\fody\FodyIsolated\InnerWeaver.cs: rindas numurs 86
1>MSBUILD: kļūda: Avots:
1>MSBUILD: kļūda: mscorlib
1>MSBUILD: kļūda: TargetSite:
1>MSBUILD : kļūda : Byte[] ComputePublicKey()
1>MSBUILD: kļūda:
1> Fody: Pabeigts Fody 551ms.


Šķiet, ka risinājuma nav, skatiet rakstu:

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

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


Nepaļaujieties uz spēcīgiem vārdiem, lai paliktu drošībā.

Tāpēc šķiet bezjēdzīgi iet papildu jūdzi, lai aizsargātu kaut ko, kas nav drošības līdzeklis

 Saimnieks| Publicēts 17.04.2018 13:02:12 |
xxhh Publicēts 2018-4-17 11:35
Pēc Costura.Fody instalēšanas tieši vs NuGet, es vilku Windows Media Playe atskaņotāju, lai ģenerētu divus iebūvētus DLL, lai izdzēstu vai ziņotu ...

Windows Media Player vadīklas ir com komponenti, es nezinu, vai "Costura.Fody" tos atbalsta.

1: Jums vajadzētu redzēt, vai "Costura.Fody" atbalsta "com komponentus"
2: Ignorējiet divus DLL, kas ir iepakoti, jo par to, kā ignorēt xml ir jāiestata, lūdzu, skatiet oficiālo dokumentāciju, lai iegūtu sīkāku informāciju
Publicēts 17.04.2018 10:29:52 |
Lejupielādējiet, lai skatītu XML konfigurāciju
Publicēts 17.04.2018 10:33:34 |
Īpašnieks vēlas jums jautāt, vai es varu iegūt video un dll kopā exe spraudnī
 Saimnieks| Publicēts 17.04.2018 11:16:15 |
xxhh Publicēts 2018-4-17 10:33
Īpašnieks vēlas jums jautāt, vai es varu iegūt video un dll kopā exe spraudnī
...

To var izdarīt, varat iestatīt video rekvizītu uz "Iegultie resursi" un pēc tam izlasīt resursu failu.
Publicēts 17.04.2018 11:35:51 |
Xiao Zhao publicēts 2018-4-17 11:16
To var izdarīt, varat iestatīt video rekvizītu uz "Iegultie resursi" un pēc tam izlasīt resursu failu. ...

Es vilku Windows Media Playe atskaņotāju tieši pēc Costura.Fody instalēšanas vs NuGet un izveidoju divus iebūvētus DLL, lai izdzēstu vai ziņotu par kļūdu  
Publicēts 17.04.2018 11:57:09 |
Vai XML joprojām ir jāiestata?     
Publicēts 17.04.2018 17:42:31 |
Xiao Zhao publicēts 2018-4-17 11:16
To var izdarīt, varat iestatīt video rekvizītu uz "Iegultie resursi" un pēc tam izlasīt resursu failu. ...

Saimnieks vai es, es gribu jautāt, es ievietoju video iegultajā resursā, tas, kas nolasāms, ir baitu masīvs, vai ir kāds veids, kā to ievietot atskaņotājā un atskaņot tieši (es nevēlos rakstīt vietējam, lai atskaņotu lasīšanas ceļā, video ir vairāk nekā lielā karte)
 Saimnieks| Publicēts 17.04.2018 20:52:16 |
xxhh Publicēts 2018-4-17 17:42
Saimnieks vai es, es gribu jautāt, es ievietoju video iegultajā resursā, un tas, kas nolasāms, ir baitu masīvs, vai ir kāds veids, kā to ievietot atskaņotājā un atskaņot tieši ( ...

Nav ieteicams izveidot lielu video resursu failā, jūs varat redzēt, vai spēlētājam ir kāds cits veids, kā tieši nodot baitu[]
Publicēts 18.04.2018 08:08:48 |
Xiao Zhazha Publicēts 2018-4-17 20:52
Nav ieteicams izveidot lielu video resursu failā, jūs varat redzēt, vai spēlētājam ir kāds cits veids, kā tieši nodot baitu [] ...

Neviens no viņiem nelasa video adreses un nevēlas jautāt, kādas labas idejas jums ir
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com