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

Vaade: 59779|Vastuse: 9

[Allikas] "Dünaamiline asendus" .NET pluginatele

[Kopeeri link]
Postitatud 2021-8-15 21:55:14 | | |
Kujutage ette olukorda, kus meie teenusesüsteem pakub mitmeid funktsionaalseid teenuseid ning tulevikus lisandub veel uusi funktsionaalseid teenuseid ning funktsionaalseid teenuseid võib vajada muutmist või eemaldamist. Sellise teenusesüsteemi tavaline põhinõue on, et teenuse süsteemi tööd ei saa peatada funktsionaalsete teenuste lisamisel, eemaldamisel või uuendamisel. Tavaliselt saab "hot-swapping pluginaid" väga lihtsalt rakendada, kapseldades iga teenuse plugina DLL-i, kuid pluginate "hot replacement" ("dünaamiline asendus") muutub probleemiks. Põhjus on selles, et kui me desinstallime plugina DLL-i teenusesüsteemist, hoiab teenusesüsteem tegelikult endiselt DLL-i aluseks olevat viidet ja kui üritad DLL-i kustutada või üle kirjutada, annab Windows teate nagu "dll on kasutusel".

Kuidas siis seda probleemi lahendada? Arvan, et on vähemalt kaks võimalust:

(1) Kasuta AppDomaini. Pluginate laadimine uude AppDomaini ja seejärel AppDomaini desinstallimine eemaldab pluginad DLL-id puhtalt teenusesüsteemist. Selle lähenemise miinus on see, et pead haldama palju AppDomaine (sest sul on nii palju funktsionaalseid teenuseid) ning suhtlus AppDomainide vahel toimub kaugjuhtimise teel, mis tekitab meie süsteemile palju tarbetuid peavalusid. Kui oled huvitatud, võid proovida ka seda võimalust, mina eelistan teist varianti.

(2) Kopeeri plugin Dll mällu ja laadi Dll mällu. Nii saab kõvaketta DLL-e soovi korral üle kirjutada või kustutada. Varem laadisime plugina DLL-i otse kõvakettalt, umbes nii:

Nüüd peame pöörde pöörama:


See lahendab pluginate "dünaamilise asenduse" probleemi.





Eelmine:Spring Cloud salvestab kõik päringute liidese logid MongoDB-sse
Järgmine:.NET/C# teisendab allakriipsutatud väljade nimed suurteks kühmakujudeks
Postitatud 2021-8-15 23:11:28 |
Nii suur projekt, et parem on server öösel taaskäivitada...
Postitatud 2021-8-17 14:43:41 |
Aitäh jagamast!~'
Postitatud 2021-9-16 18:25:58 |
Testivastused
Postitatud 2021-9-17 21:39:18 |
Õpi seda
Postitatud 2021-9-18 19:05:29 |
Seda postitust toimetas viimati fyxh66 18.09.2021 kell 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 proovis ka, ei @小slag Bossil on aega aidata ja vaadata
 Üürileandja| Postitatud 2021-9-18 22:08:32 |
fyxh66 postitatud 2021-9-18 19:05
System.BadImageFormatException:“未能加载文件或程序集“12505088 bytes loaded from 3.3hook, Version=1 ...

Sellist probleemi pole ma kohanud.

On kaks olukorda, kus System.BadImageFormatException erik esineb: programmi sihtplatvorm on ebajärjekindel > viite-dll faili süsteemiplatvorm on ebajärjekindel.

Kontroll: Kas põhiprogrammi ja plug-in dll-ide .NET versioonid on järjepidevad ning sihtplatvorm järjepidev või pole dll-id arendatud .net-is?
Postitatud 2021-9-19 16:17:56 |
Avaldatud 2021-9-18 22:08
Sellist probleemi pole ma kohanud.

System.BadImageFormatException erik esineb kahes olukorras: programmi sihtplatvorm on ebajärjekindel > viide dll ...

Jah, c++ dll...
 Üürileandja| Postitatud 2021-9-19 17:01:33 |

See pole kindlasti hea, dünaamiline plugin suudab laadida ainult .NET DLL-e ja C++ kutsuvad DLL-id ei ole sellisel viisil kohandatud
Postitatud 2021-9-19 18:54:53 |
Xiaozha Postitatud 2021-9-19 17:01
See pole kindlasti hea, dünaamiline plugin suudab laadida ainult .net DLL-e ja DLL-id, mis kutsuvad C++, pole nii häälestatud...

Kas on mingit võimalust kutsuda dll-i C++ keeles, kasutades otse dll-i baiti[] baiti, et kutsuda sees olevaid meetodeid?
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