Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 219600|Válasz: 43

[WinForm] .net/c# Használd a Costura.Fody fájlt a DLL becsomagolásához az EXE-be

[Linket másol]
Közzétéve 2018. 04. 14. 14:41:49 | | | |
A Winform/wpf fejlesztés elkerülhetetlenül sok harmadik féltől származó DLL-re vonatkozik, de minden csomagoláskor a Debug könyvtárban lévő fájlokat át kell másolnod vagy megosztanod az ügyfélnek, ami nem túl kényelmes a használatra. Korábban több szoftvert is kipróbáltam dll fájlok összevonására, például az ILMerge-t, az Enigma Virtual Box-ot, de amíg meg nem tudtam a "Costura.Fody"-t, úgy éreztem, a világ sokkal jobb ~

Az alábbiakban a Winform által írt program, amely a "HttpHelper.dll" és "Newtonsoft.Json.dll" két DLL-re hivatkozik, amikor létrehozzuk a programot, egy exe fájl és ezek a két DLL fájl lesz, ami nagyon kényelmetlenül érzi magát az embereken, és ha egy DLL kevesebb van, a program kivételt jelenthet, ahogy az alábbi ábrán látható:



Az alábbi link az előző használat (nem ajánlott)

C# csomagolja a dll-t az exe programjába
http://www.itsvse.com/thread-2841-1-1.html
(Forrás: Architect_Programmer)



A Costura.Fody eszközzel össze tudod olvasni a forrás DLL-t a cél EXE-vel

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

Hogyan kell közvetlenül telepíteni a nuget csomagot:



Ha sikeresen hozzáadtad a Costura.Fody-t, a megoldás automatikusan hozzáadja FodyWeavers.xml fájlt.

Generáld újra a megoldást, a sikered a program generáló könyvtárban látható, az összes DLL tökéletesen be van olvadva az exe-vel, közvetlenül másolhatod az exe fájlt a kliensbe, hogy önállóan futhasson. Ahogy az alábbiakban látható:

1>------ Minden újraépítés elindult: Projekt: itsvse, Konfiguráció: Bármilyen CPU hibakeresése ------
1> Fody: Fody (2.0.0.0 verzió) Végrehajtás
1> Fody/Costura: Nem találtak utalást a 'Costura.dll'-re. Hivatkozások nem módosítottak.
1> Fody/Costura: 'E:\project\itsvse\itsvse\HttpHelper.dll' beágyazása
1> Fody/Costura: 'E:\project\itsvse\itsvse\Newtonsoft.Json.dll' beágyazása
1> Fody: Befejeztem a Fody 609ms-t.
1> Fody: Kihagytam az Ellenőrzési összeállítást, mivel a konfigurációban ki van tiltva
1> Fody: Kész az ellenőrzés 3 másodperc alatt.
1> itsvse -> E:\project\itsvse\itsvse\bin\Debug\itsvse.exe
========== Regenerálj mindet: 1 sikerrel, 0 sikerrel, és 0 ========== kihagyva





Ahogy a fenti képen is látható, a generált fájl nem tartalmaz Newtonsoft.Json.dll, HttpHelper.dll és Costura.dll nem generálódnak, csak két fájlt, itsvse.exe hibázatlanul közvetlenül futtatható! (A PDB fájl törölhető).

Használjuk az ILSpy eszközt a programunk dekompilálására, és nézzük meg a generált forráskódot, ahogy az alábbi ábrán látható:



Bevezetés a megvalósítási elvhez

Amikor a CLR megpróbál betölteni egy assembly rendszert, de nem tölti be, az AppDomain.AssemblyResolve eseményt indítja. A programunk meghallgathatja ezt az eseményt, és vissza tudja küldeni azt az assembly rendszert, amelyet a CLR megpróbál betölteni az eseménykezelőben, hogy a program továbbra is normálisan működhessen.

A Fody.Costura az EXE által hivatkozott összes DLL-t beágyazza az EXE fájlba a projekt építésekor. Amikor egy program ezek közül az egyik DLL-t használja a végrehajtás során (az AppDomain.AssemblyResolve esemény azért indul ki, mert a CLR nem találja meg a DLL fájlt), a szükséges DLL-t az EXE fájl beágyazott erőforrásaiból nyerik.


Láthatod, hogy az Attach metódus az AppDomain.AssemblyResolve eseményt hallgatja. Ha a CLR nem sikeresen tölt be egy összeállítást, az AssemblyResolve eseménykezelő elindul. Az AssemblyResolve megpróbálja megszerezni a cél assembly beágyazott erőforrását a Common.ReadFromEmbeddedResources metódusal keresztül, majd visszaküldi a CLR-nek.

Ezt látva megkérdezheted, mikor vezették be az Attach módszert?

Valójában a C# nyelv esetében a CLR egy nagy trükköt rejt – a CLR képes inicializált kódot végrehajtani, mielőtt minden modul (minden összeállítás egy vagy több modult tartalmaz) betöltődne. Sajnos a C# nyelv nem rendelkezik ezen a kód feletti ellenőrzéssel. A Fody.Costura közvetlenül az IL kódot az EXE assembly belső moduljának inicializációs funkciójába fecskendezi, és ez az IL kód része valójában végrehajtja az Attach metódust. Így, miután az EXE összeállítás betöltődik, azonnal behívható az Attach módszer.

A fentiek rövid bevezetést nyújtanak a Fody.Costura megvalósítási elvéhez.


Fejlett konfiguráció

Ezeket a konfigurációkat CosturaFodyWeavers.xml fájlokban adják hozzá vagy módosítják.

CreateTemporaryAssemblies
Alapértelmezés: hamis
Ez beágyazza a beágyazott fájlt a lemezre, mielőtt betölti a memóriába. Ez bizonyos helyzetekben hasznos, amikor egy összeállítást akarsz betölteni egy fizikai fájlból.

IncludeDebugSymbols
Alapértelmezett: true
Szabályozza, hogy a referencia összeállítás .pdb-i is be vannak ágyazva.

DisableCompression
Alapértelmezés: hamis
A beágyazott összeszerelések alapértelmezés szerint tömörítve és betöltéskor nem tömörítik. Ezzel a lehetőséggel kikapcsolhatod a kompressziót.
Megjegyzés: Mindenképpen kapcsold ki ezt a tulajdonságot, amikor nem szabványos DLL-ekre vagy titkosított DLL-ekre hivatkozol. Ellenkező esetben az exe nem nyitható meg. Ezt akkor fedeztem fel, amikor DSkin.dll használtam.

LetiltásTisztítás
Alapértelmezés: hamis
A Cosura részeként a beágyazott alkatrészek már nem szerepelnek az építésben. Ez a takarítás ki lehet kapcsolni.

LoadAtModuleInit
Alapértelmezett: true
A Costura alapértelmezetten a modul inicializációjának részeként töltődik be. A zászló letiltja a viselkedést. Győződj meg róla, hogy tudsz valahol használni a CosturaUtility.Initialize()-t.

ExcludeAssemblies
Hogyan kell használni: ExcludeAssemblies="DLL1| DLL2"
Egy lista az assembly nevekről, amelyeket ki kell zárni az alapértelmezett "beágyazd az összes helyi hivatkozást másolni" műveletből.

IncludeAssemblies
Hogyan kell használni: IncludeAssemblies="DLL1| DLL2"
Az összes helyi hivatkozás beágyazásának alapértelmezett műveletében szereplő assembly nevek listája.

Unmanaged32Assemblies&Unmanaged64Assemblies
Hogyan kell használni: Unmanaged32Assemblies="DLL1| DLL2" Unmanaged64Assemblies="DLL1| DLL2"
A vegyes módú összeállításokat nem lehet ugyanúgy betölteni, mint a kezelt összeállításokat. Ezért, hogy a Costura felismerje, mely komponensek kevert módban vannak, és mely környezetekben kell betölteni őket, a nevüket az egyik vagy mindkét listában fel kell tüntetni. Ne írj .exe vagy .dll a névben.

PreloadOrder
Használat: PreloadOrder="DLL1| DLL2"
A helyi könyvtárakat a Cosura automatikusan betöltheti. Ha helyi könyvtárat szeretnél beépíteni, tedd be a projektedbe beágyazott erőforrásként, amelyet costura32 vagy costura64 mappának hívnak, a könyvtár instabilitásától függően. Alternatívaként megadhatod a betöltési sorrendet, amelyben az előre betöltött könyvtárak betöltődnek. Amikor ideiglenes komponenseket keversz a lemezről, azok is előre betöltődnek.

CosturaUtility
Hogyan kell használni:




A CosturaUtility egy olyan kaszt, amely lehetővé teszi, hogy manuálisan inicializáld a Costura rendszert a saját kódodban.Ez főként olyan helyzetekre vonatkozik, amikor a modul inicializációs program nem működik, például könyvtárakat és mono.


Végül töltsd le a forráskódot a szövegben:

Turisták, ha szeretnétek megnézni ennek a bejegyzésnek a rejtett tartalmát, kérlekVálasz





Előző:StreamReader megoldás a zavaros karakterekre fájlok olvasása közben
Következő:Megoldások a Hyper-V, a VirtualBox és a VMware közötti konfliktusokra
Közzétéve 2018. 06. 07. 9:35:19 |
Próbáld ki ezt a módszert a függőségi komponens-DLL-t integrálni a C# fordított EXE-be!

Ha könnyű használni, ne felejtsd el dicsérni! Haha, ez, csak hozzáadom a DLL-t az erőforrás fájlhoz, egyszerű és praktikus módon! (Nem értem, tudok egy oktatóvideót kitalálni) @小渣渣

 Háziúr| Közzétéve 2018. 06. 06. 10:30:42 |
Ha aláírsz egy programot, a következő hibát kapod:

1>MSBUILD : hiba : Fody: Egy kezeletlen kivétel történt:
1>MSBUILD : hiba : Kivétel:
1>MSBUILD: hiba: Nem sikerült nyilvános kulcsot szerezni a StrongNameKeyPair-hez.
1>MSBUILD : hiba : StackTrace:
1>MSBUILD: hiba: a System.Reflection.StrongNameKeyPair.ComputePublicKey() címen
1>MSBUILD: hiba: System.Reflection.StrongNameKeyPair.get_PublicKey()
1>MSBUILD: hiba: a Mono.Cecil.ModuleWriter.WriteModuleTo (ModuleDefinition modul, Disposable'1 stream, WriterParameters parameters)
1>MSBUILD: hiba: a Mono.Cecil.ModuleDefinition.Write(String fileName, WriterParameters parameters) fájlban
1>MSBUILD: error: InnerWeaver.WriteModule() pozícióban C:\projects\fody\FodyIsolated\ModuleWriter.cs: 18. sor
1>MSBUILD: error: InnerWeaver.Execute() pozícióban C:\projects\fody\FodyIsolated\InnerWeaver.cs: sor 86
1>MSBUILD : hiba : Forrás:
1>MSBUILD : hiba : mscorlib
1>MSBUILD : hiba : TargetSite:
1>MSBUILD : error : Byte[] ComputePublicKey()
1>MSBUILD : hiba :
1> Fody: Befejeztem a Fody 551ms-t.


Úgy tűnik, nincs megoldás, lásd a cikket:

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

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


Ne támaszkodj erős nevekre a biztonság érdekében.

Szóval értelmetlennek tűnik többet megtenni valamit, ami nem biztonsági funkció

 Háziúr| Közzétéve 2018. 04. 17. 13:02:12 |
xxhh Közzétéve: 2018-04-17, 11:35
Miután közvetlenül telepítettem a Costura.Fody-t a vs NuGet-be, húztam egy Windows Media Playe lejátszót, hogy két beépített DLL-t generáljak törlésre vagy jelentésre ...

A Windows Media Player vezérlők kom komponensek, nem tudom, hogy a "Costura.Fody" támogatja-e őket.

1: Nézd meg, hogy a "Costura.Fody" támogatja-e a "com komponenseket"
2: Ne hagyd figyelmen kívül a két csomagolt DLL-t, és az xml beállításához vonatkozóan, kérjük, nézze meg a hivatalos dokumentációt a részletekért
Közzétéve 2018. 04. 17. 10:29:52 |
Töltsd le az XML konfigurációt
Közzétéve 2018. 04. 17. 10:33:34 |
A tulajdonos meg akarja kérdezni, hogy össze tudom-e hozni a videót és a dll-t egy exe pluginba
 Háziúr| Közzétéve 2018. 04. 17. 11:16:15 |
xxhh Közzétéve: 2018-4-17 10:33
A tulajdonos meg akarja kérdezni, hogy össze tudom-e hozni a videót és a dll-t egy exe pluginba
...

Ezt megteheted, beállíthatod a videó tulajdonságot "Beágyazott erőforrások" módra, majd elolvashatod az erőforrás fájlt.
Közzétéve 2018. 04. 17. 11:35:51 |
Xiao Zhao 2018-4-17-en írt, 11:16
Ezt megteheted, beállíthatod a videó tulajdonságot "Beágyazott erőforrások" módra, majd elolvashatod az erőforrás fájlt. ...

Közvetlenül a Costura.Fody telepítése után húztam egy Windows Media Playe lejátszót a vs NuGet verzióban, és két beépített DLL-t hoztam létre, hogy töröljem vagy jelentsem a hibát  
Közzétéve 2018. 04. 17. 11:57:09 |
Még mindig be kell állítani az XML-t?     
Közzétéve 2018. 04. 17. 17:42:31 |
Xiao Zhao 2018-4-17-en írt, 11:16
Ezt megteheted, beállíthatod a videó tulajdonságot "Beágyazott erőforrások" módra, majd elolvashatod az erőforrás fájlt. ...

A házigazda vagy én, szeretném megkérdezni, beteszem a videót a beágyazott erőforrásba, ami kijön, az egy bájttömb, van-e mód arra, hogy betegyük a lejátszóba és közvetlenül lejátszani (nem akarok a helyi oldalra írni, hogy az olvasási útvonalon játszhassam, a videó több, mint a nagy kártya).
 Háziúr| Közzétéve 2018. 04. 17. 20:52:16 |
xxhh Közzétéve: 2018-4-17 17:42
A bérbeadó vagy én, szeretném megkérdezni, beteszem a videót a beágyazott erőforrásba, és ami kijön, az egy bájtos tömb, van-e mód arra, hogy betegyük a lejátszóba és közvetlenül lejátszhassam ( ...

Nem ajánlott egy nagy videót erőforrás fájllá alakítani, megnézheted, van-e más módja annak, hogy a lejátszó közvetlenül byte-ban továbbítson[]
Közzétéve 2018. 04. 18. 8:08:48 |
Xiao Zhazha Közzétéve: 2018-4-17 20:52
Nem ajánlott egy nagy videót erőforrás fájllá alakítani, megnézheted, van-e más mód arra, hogy a lejátszó közvetlenül byte-ban továbbítson[] ...

Egyikük sem olvasta a videós címeket, és nem akarja megkérdezni, milyen jó ötleteid vannak
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com