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

Skats: 59779|Atbildi: 9

[Avots] "Dinamiskā nomaiņa" .NET spraudņiem

[Kopēt saiti]
Publicēts 2021-8-15 21:55:14 | | |
Iedomājieties scenāriju, kurā mūsu pakalpojumu sistēma nodrošina virkni funkcionālu pakalpojumu, un nākotnē tiks pievienoti vairāk jaunu funkcionālo pakalpojumu, un funkcionālie pakalpojumi var būt jāmaina vai jānoņem. Kopīga pamatprasība šādai pakalpojumu sistēmai ir tāda, ka pakalpojumu sistēmas darbību nevar apturēt, pievienojot/noņemot/atjauninot funkcionālos pakalpojumus. Parasti "karstās maiņas spraudņus" var ļoti viegli ieviest, iekapsulējot katru pakalpojumu spraudņa dll, bet spraudņu "karstā nomaiņa" ("dinamiskā nomaiņa") kļūst par problēmu. Iemesls ir tāds, ka, atinstalējot spraudni Dll no pakalpojumu sistēmas, pakalpojumu sistēma faktiski joprojām satur pamatā esošo atsauci uz dll, un, ja mēģināt izdzēst vai pārrakstīt dll, logi sniegs ziņojumu, piemēram, "dll tiek izmantots".

Tātad, kā atrisināt šo problēmu? Es domāju, ka ir vismaz divas iespējas:

(1) Izmantojiet AppDomain. Ielādējot spraudņus jaunā AppDomain un pēc tam atinstalējot AppDomain, spraudņi tiek tīri izlādēti no pakalpojuma sistēmas. Šīs pieejas trūkums ir tas, ka jums ir jāpārvalda daudzi AppDomains (jo jums ir tik daudz funkcionālu pakalpojumu), un saziņa starp AppDomains tiek veikta attālinātā veidā, kas mūsu sistēmai rada daudz nevajadzīgu galvassāpju. Ja jūs interesē, varat arī izmēģināt šo iespēju, un es dodu priekšroku otrajam.

(2) Kopējiet spraudni Dll atmiņā un pēc tam ielādējiet Dll atmiņā. Tādā veidā cietā diska DLL var pārrakstīt vai izdzēst pēc vēlēšanās. Iepriekš mēs ielādējām spraudni Dll tieši no cietā diska, piemēram:

Tagad mums ir jāpagriež stūris:


Tas atrisina spraudņu "dinamiskās aizstāšanas" problēmu.





Iepriekšējo:Spring Cloud ieraksta visus pieprasījumu interfeisa žurnālus MongoDB
Nākamo:.NET/C# pārvērš pasvītrotus lauku nosaukumus par lielām kupra formām
Publicēts 2021-8-15 23:11:28 |
Tik liels projekts, labāk ir restartēt serveri naktī ...
Publicēts 2021-8-17 14:43:41 |
Paldies, ka dalījāties! ~
Publicēts 2021-9-16 18:25:58 |
Testa atbildes
Publicēts 2021-9-17 21:39:18 |
Uzziniet to
Publicēts 2021-9-18 19:05:29 |
Šo ziņu pēdējo reizi rediģēja fyxh66 2021-9-18 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 arī mēģināja, @小slag priekšniekam ir laiks palīdzēt apskatīt
 Saimnieks| Publicēts 2021-9-18 22:08:32 |
FYXH66 Publicēts 2021-9-18 19:05
System.BadImageFormatException:“未能加载文件或程序集“12505088 bytes loaded from 3.3hook, Version=1 ...

Neesmu saskāries ar šo problēmu.

Ir divas situācijas, kad rodas System.BadImageFormatException izņēmums: programmas mērķa platforma ir nekonsekventa > atsauces dll faila sistēmas platforma ir nekonsekventa.

Pārbaudiet: vai galvenās programmas un spraudņu dll .NET versijas ir konsekventas un mērķa platforma ir konsekventa, vai arī dll nav izstrādātas .net?
Publicēts 2021-9-19 16:17:56 |
Publicēts 2021-9-18 22:08
Neesmu saskāries ar šo problēmu.

Ir divas situācijas, kad rodas System.BadImageFormatException izņēmums: programmas mērķa platforma ir nekonsekventa > atsauces dll ...

Jā, c++ dll ...
 Saimnieks| Publicēts 2021-9-19 17:01:33 |

Tas noteikti nav labi, dinamiskais spraudnis šeit var ielādēt tikai .NET DLL, un DLL, kas izsauc C++, šādā veidā netiek pielāgoti
Publicēts 2021-9-19 18:54:53 |
Xiaozha Publicēts 2021-9-19 17:01
Tas noteikti nav labi, dinamiskais spraudnis šeit var ielādēt tikai .net DLL, un DLL, kas izsauc C++, nav noregulēti šādi ...

Vai ir kāds veids, kā izsaukt dll C++, tieši izmantojot dll baitu [] baitu, lai izsauktu metodes iekšpusē?
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