Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 59779|Odpoveď: 9

[Zdroj] "Dynamická náhrada" pre .NET pluginy

[Kopírovať odkaz]
Zverejnené 15.8.2021 21:55:14 | | |
Predstavte si scenár, kde náš servisný systém poskytuje sériu funkčných služieb a v budúcnosti budú pridané ďalšie nové funkčné služby a funkčné služby budú potrebné meniť alebo odstraňovať. Bežnou základnou požiadavkou takéhoto servisného systému je, že prevádzku servisného systému nie je možné zastaviť pri pridávaní/odstraňovaní/aktualizácii funkčných služieb. Normálne sa "hot-swapping pluginy" dajú veľmi jednoducho implementovať zapuzdrením každej služby do pluginu dll, ale "hot replacement" ("dynamická náhrada") pluginov sa stáva problémom. Dôvod je ten, že keď odinštalujeme plugin DLL zo servisného systému, servisný systém stále uchováva podkladovú referenciu na dll, a ak sa pokúsite DLL vymazať alebo prepísať, Windows zobrazí správu ako "dll sa používa".

Ako teda tento problém vyriešiť? Myslím, že existujú aspoň dve možnosti:

(1) Použite AppDomain. Načítanie pluginov v novom AppDomain a následné odinštalovanie AppDomain čisto odpojí DLL pluginu zo servisného systému. Nevýhodou tohto prístupu je, že musíte spravovať veľa AppDomainov (pretože máte toľko funkčných služieb) a komunikácia naprieč AppDomains prebieha na diaľku, čo prináša do nášho systému veľa zbytočných starostí. Ak máš záujem, môžeš skúsiť aj túto možnosť, a ja preferujem druhú.

(2) Skopírovať plugin Dll v pamäti a potom načítať Dll v pamäti. Týmto spôsobom je možné DLL na pevnom disku kedykoľvek prepísať alebo vymazať. Predtým sme načítavali plugin DLL priamo z pevného disku, takto:

Teraz musíme zmeniť smer:


Tým sa rieši problém "dynamickej náhrady" pluginov.





Predchádzajúci:Spring Cloud zaznamenáva všetky logy rozhrania požiadaviek do MongoDB
Budúci:.NET/C# konvertuje podčiarknuté názvy polí na veľké hrbové formy
Zverejnené 15.8.2021 23:11:28 |
Taký veľký projekt, je lepšie reštartovať server v noci...
Zverejnené 17. 8. 2021 o 14:43:41 |
Ďakujem, že si sa podelil!~'
Zverejnené 16. 9. 2021 o 18:25:58 |
Odpovede na testy
Zverejnené 17. 9. 2021 21:39:18 |
Nauč sa to
Zverejnené 18.9.2021 o 19:05:29 |
Tento príspevok naposledy upravil fyxh66 dňa 18.9.2021 o 19:07

System.BadImageFormatException:“未能加载文件或程序集“12505088 bytes loaded from 3.3hook, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。试图加载格式不正确的程序。”IL 格式不正确。
  • var dll = Assembly.Load(addinStream);
86 tiež skúšal, bez @小slag Šéf má čas pomôcť pozrieť sa na to
 Prenajímateľ| Zverejnené 18. 9. 2021 22:08:32 |
FYXH66 Zverejnené 18.9.2021 o 19:05
System.BadImageFormatException:“未能加载文件或程序集“12505088 bytes loaded from 3.3hook, Version=1 ...

S týmto problémom som sa nestretol.

Existujú dve situácie, keď sa vyskytuje výnimka System.BadImageFormatException: cieľová platforma programu je nekonzistentná > systémová platforma referenčného dll súboru je nekonzistentná.

Skontrolujte: Sú .NET verzie hlavného programu a plug-in DLL konzistentné a cieľová platforma konzistentná, alebo DLL nie sú vyvíjané na .net?
Zverejnené 19.9.2021 o 16:17:56 |
Publikované 18. 9. 2021 o 22:08
S týmto problémom som sa nestretol.

Existujú dve situácie, keď sa vyskytne výnimka System.BadImageFormatException: cieľová platforma programu je nekonzistentná > referenčného dll ...

Áno, c++ dll...
 Prenajímateľ| Zverejnené 19. 9. 2021 o 17:01:33 |

To rozhodne nie je dobré, dynamický plugin tu dokáže načítať len .NET DLL a DLL volajúce C++ sa takto neupravujú
Zverejnené 19. 9. 2021 o 18:54:53 |
Xiaozha Zverejnené 19.9.2021 17:01
To určite nie je dobré, dynamický plugin tu dokáže načítať len .net DLL a DLL volajúce C++ nie sú takto naladené...

Existuje nejaký spôsob, ako volať dll v C++ priamym použitím bajtového setu [] dll na volanie metód vo vnútri?
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com