Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 59779|Odpověď: 9

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

[Kopírovat odkaz]
Zveřejněno 15. 8. 2021 21:55:14 | | |
Představte si scénář, kdy náš servisní systém poskytuje řadu funkčních služeb a v budoucnu budou přidány další nové funkční služby a funkční služby budou muset být změněny nebo odstraněny. Běžným základním požadavkem pro takový servisní systém je, že provoz servisního systému nelze zastavit při přidávání/odebírání/aktualizaci funkčních služeb. Obvykle lze "hot-swapping pluginy" implementovat velmi snadno tím, že se každá služba zapouzdří do pluginu dll, ale "hot replacement" ("dynamická náhrada") pluginů se stává problémem. Důvodem je, že když odinstalujeme plugin DLL ze servisního systému, servisní systém stále uchovává podkladovou referenci na DLL, a pokud se pokusíte DLL smazat nebo přepsat, Windows zobrazí zprávu typu "dll je používáno".

Jak tedy tento problém vyřešit? Myslím, že jsou alespoň dvě možnosti:

(1) Použijte AppDomain. Načtení pluginů v novém AppDomain a následné odinstalování AppDomain čistě odstraní dll pluginu ze servisního systému. Nevýhodou tohoto přístupu je, že musíte spravovat mnoho AppDomainů (protože máte tolik funkčních služeb) a komunikace napříč AppDomainy probíhá na dálku, což našemu systému přináší spoustu zbytečných komplikací. Pokud máte zájem, můžete zkusit i tuto možnost, a já preferuji druhou možnost.

(2) Zkopírovat plugin Dll do paměti a poté načíst Dll do paměti. Tímto způsobem lze DLL na pevném disku libovolně přepsat nebo smazat. Dříve jsme načítali plugin Dll přímo z pevného disku, takto:

Teď musíme otočit nový směr:


To řeší problém "dynamické náhrady" pluginů.





Předchozí:Spring Cloud zaznamenává všechny logy rozhraní požadavků do MongoDB
Další:.NET/C# převádí podtržené názvy polí na velké hrby
Zveřejněno 15. 8. 2021 23:11:28 |
Tak velký projekt, je lepší restartovat server v noci...
Zveřejněno 17. 8. 2021 14:43:41 |
Díky za sdílení!~'
Zveřejněno 16. 9. 2021 18:25:58 |
Odpovědi na testy
Zveřejněno 17. 9. 2021 21:39:18 |
Nauč se to
Zveřejněno 18. 9. 2021 19:05:29 |
Tento příspěvek byl naposledy upraven fyxh66 dne 18. 9. 2021 v 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 to také zkoušel, ale @小slag Šéf má čas pomoci se podívat
 Pronajímatel| Zveřejněno 18. 9. 2021 22:08:32 |
FYXH66 Zveřejněno 18. 9. 2021 19:05
System.BadImageFormatException:“未能加载文件或程序集“12505088 bytes loaded from 3.3hook, Version=1 ...

S tímto problémem jsem se nesetkal.

Existují dvě situace, kdy se vyskytuje výjimka System.BadImageFormatException: cílová platforma programu je nekonzistentní > systémová platforma referenčního dll souboru je nekonzistentní.

Kontrola: Jsou .NET verze hlavního programu a plug-in DLL konzistentní a cílová platforma konzistentní, nebo nejsou DLL vyvíjeny na .net?
Zveřejněno 19. 9. 2021 16:17:56 |
Publikováno 18. 9. 2021 22:08
S tímto problémem jsem se nesetkal.

Existují dvě situace, kdy se objeví výjimka System.BadImageFormatException: cílová platforma programu je nekonzistentní > referenční dll ...

Ano, c++ dll...
 Pronajímatel| Zveřejněno 19. 9. 2021 17:01:33 |

To rozhodně není dobré, dynamický plugin zde umí načíst jen .NET DLL a DLL volající C++ nejsou tímto způsobem nastaveny
Zveřejněno 19. 9. 2021 18:54:53 |
Xiaozha Zveřejněno 19. 9. 2021 17:01
To rozhodně není dobré, dynamický plugin zde umí načíst jen .net DLL a DLL volající C++ nejsou takto naladěné...

Existuje nějaký způsob, jak volat dll v C++ přímo pomocí bajtů[] bajtů dll k volání metod uvnitř?
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com