Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 59779|Svare: 9

[Kilde] "Dynamisk erstatning" for .NET-plugins

[Kopier lenke]
Publisert 15.08.2021 kl. 21:55:14 | | |
Tenk deg et scenario der vårt tjenestesystem tilbyr en rekke funksjonelle tjenester, og flere nye funksjonelle tjenester vil bli lagt til i fremtiden, og funksjonelle tjenester kan måtte endres eller fjernes. Et vanlig grunnleggende krav for et slikt tjenestesystem er at driften av tjenestesystemet ikke kan stoppes når funksjonelle tjenester legges til/fjernes/oppdateres. Normalt kan "hot-swapping plugins" implementeres veldig enkelt ved å kapsle inn hver tjeneste i en plugin-dll, men "hot replacement" ("dynamisk utskifting") av plugins blir et problem. Grunnen er at når vi avinstallerer en plugin-dll fra tjenestesystemet, holder tjenestesystemet faktisk fortsatt den underliggende referansen til dll-en, og hvis du prøver å slette eller overskrive dll-en, vil Windows gi en melding som «dll-en blir brukt».

Så hvordan løse dette problemet? Jeg tror det finnes minst to alternativer:

(1) Bruk AppDomain. Å laste plugins i et nytt AppDomain og deretter avinstallere AppDomain laster plugin-DLL-ene rent fra tjenestesystemet. Ulempen med denne tilnærmingen er at du må administrere mange AppDomains (fordi du har så mange funksjonelle tjenester), og kommunikasjon på tvers av AppDomains skjer på en fjernstyrt måte, noe som fører til mange unødvendige hodepiner i systemet vårt. Hvis du er interessert, kan du også prøve dette alternativet, og jeg foretrekker å bruke det andre.

(2) Kopier plugin-Dll-en i minnet, og last deretter DLL-en i minnet. På denne måten kan DLL-ene på harddisken overskrives eller slettes etter eget ønske. Tidligere lastet vi inn plugin Dll direkte fra harddisken, slik:

Nå må vi ta en vending:


Dette løser problemet med «dynamisk utskifting» av plugins.





Foregående:Spring Cloud registrerer alle forespørslergrensesnittlogger til MongoDB
Neste:.NET/C# konverterer understrekede feltnavn til store pukkelformer
Publisert 15.08.2021 kl. 23:11:28 |
Et så stort prosjekt, det er bedre å starte serveren på nytt om natten...
Publisert 17.08.2021 14:43:41 |
Takk for at du delte!~'
Publisert 16.09.2021 18:25:58 |
Testsvar
Publisert 17.09.2021 kl. 21:39:18 |
Lær det
Publisert 2021-9-18 19:05:29 |
Dette innlegget ble sist redigert av fyxh66 18.09.2021 kl. 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 prøvde også, ikke @小slag Sjefen har tid til å hjelpe til med å ta en titt
 Vert| Publisert 18.09.2021 kl. 22:08:32 |
fyxh66 publisert 18.09.2021 kl. 19:05
System.BadImageFormatException:“未能加载文件或程序集“12505088 bytes loaded from 3.3hook, Version=1 ...

Har ikke støtt på dette problemet.

Det finnes to situasjoner hvor System.BadImageFormatException-unntaket oppstår: målplattformen til programmet er inkonsistent > systemplattformen til referanse-dll-filen er inkonsistent.

Sjekk: Er .NET-versjonene av hovedprogrammet og plug-in-DLL-ene konsistente, og målplattformen konsistente, eller er ikke DLL-ene utviklet på .NET?
Publisert 19.09.2021 16:17:56 |
Publisert 18.09.2021 kl. 22:08
Har ikke støtt på dette problemet.

Det finnes to situasjoner hvor System.BadImageFormatException-unntaket oppstår: programmets målplattform er inkonsistent > referanse-dll-en ...

Ja, c++ dll...
 Vert| Publisert 19.09.2021 17:01:33 |

Det er definitivt ikke bra, den dynamiske pluginen her kan bare laste .NET DLL-er, og DLL-ene som kaller C++ justeres ikke på denne måten
Publisert 2021-9-19 18:54:53 |
Xiaozha Publisert 19.09.2021 17:01
Det er definitivt ikke bra, den dynamiske pluginen her kan bare laste .net-DLL-er, og DLL-ene som kaller C++ er ikke justert slik...

Finnes det noen måte å kalle dll-en i C++ ved å bruke byte[]-bytesettet til dll-en direkte for å kalle metodene inni?
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com