Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 59779|Atsakyti: 9

[Šaltinis] "Dinaminis pakeitimas" .NET įskiepiams

[Kopijuoti nuorodą]
Publikuota: 2021-8-15 21:55:14 | | |
Įsivaizduokite scenarijų, kai mūsų paslaugų sistema teikia daugybę funkcinių paslaugų, o ateityje bus pridėta daugiau naujų funkcinių paslaugų, o funkcines paslaugas gali tekti keisti arba pašalinti. Bendras pagrindinis tokios paslaugų sistemos reikalavimas yra tai, kad paslaugų sistemos veikimas negali būti sustabdytas pridedant, pašalinant / atnaujinant funkcines paslaugas. Paprastai "karšto keitimo įskiepiai" gali būti labai lengvai įgyvendinami kiekvieną paslaugą į įskiepių DLL, tačiau "karštas pakeitimas" ("dinaminis pakeitimas") įskiepiai tampa problema. Priežastis ta, kad kai pašaliname papildinį DLL iš paslaugų sistemos, paslaugų sistema iš tikrųjų vis dar turi pagrindinę nuorodą į dll, o jei bandysite ištrinti arba perrašyti dll, "Windows" pateiks tokį pranešimą kaip "dll naudojamas".

Taigi, kaip išspręsti šią problemą? Manau, kad yra bent du variantai:

(1) Naudokite "AppDomain". Įkėlus papildinius į naują "AppDomain" ir pašalinus "AppDomain", įskiepiai švariai iškraunami iš paslaugų sistemos. Šio požiūrio trūkumas yra tas, kad turite valdyti daug "AppDomains" (nes turite tiek daug funkcinių paslaugų), o bendravimas tarp "AppDomains" vyksta nuotoliniu būdu, o tai sukelia daug nereikalingų galvos skausmų mūsų sistemai. Jei jus domina, taip pat galite išbandyti šią parinktį, o aš mieliau naudoju antrąją.

(2) Nukopijuokite įskiepį Dll į atmintį, tada įkelkite Dll į atmintį. Tokiu būdu standžiajame diske esančius DLL galima perrašyti arba ištrinti savo nuožiūra. Anksčiau įkėlėme įskiepį "Dll" tiesiai iš standžiojo disko, taip:

Dabar turime pasukti kampą:


Tai išsprendžia įskiepių "dinaminio pakeitimo" problemą.





Ankstesnis:"Spring Cloud" įrašo visus užklausų sąsajos žurnalus į MongoDB
Kitą:.NET/C# konvertuoja pabrauktus laukų pavadinimus į dideles kupros formas
Publikuota 2021-8-15 23:11:28 |
Toks didelis projektas, geriau iš naujo paleisti serverį naktį...
Publikuota: 2021-8-17 14:43:41 |
Ačiū, kad dalinatės!~'
Publikuota: 2021-9-16 18:25:58 |
Testo atsakymai
Paskelbta 2021-9-17 21:39:18 |
Išmokite
Publikuota: 2021-9-18 19:05:29 |
Šį įrašą paskutinį kartą redagavo 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 taip pat bandė, ne @小slag Viršininkas turi laiko padėti pažvelgti
 Savininkas| Paskelbta 2021-9-18 22:08:32 |
FYXH66 Paskelbta 2021-9-18 19:05
System.BadImageFormatException:“未能加载文件或程序集“12505088 bytes loaded from 3.3hook, Version=1 ...

Su šia problema nesusidūrėte.

Yra dvi situacijos, kai System.BadImageFormatException išimtis atsiranda: programos tikslinė platforma yra nenuosekli > nuorodos dll failo sistemos platforma yra nenuosekli.

Patikrinkite: ar pagrindinės programos ir papildinių DLL .NET versijos yra nuoseklios, o tikslinė platforma nuosekli, ar DLL nėra sukurtos .net?
Publikuota: 2021-9-19 16:17:56 |
Publikuota 2021-9-18 22:08
Su šia problema nesusidūrėte.

Yra dvi situacijos, kai System.BadImageFormatException išimtis atsiranda: programos tikslinė platforma yra nesuderinama > nuoroda dll ...

Taip, c++ dll...
 Savininkas| Paskelbta 2021-9-19 17:01:33 |

Tai tikrai nėra gerai, dinaminis papildinys čia gali įkelti tik .NET DLL, o DLL, skambinantys C++, tokiu būdu nėra sureguliuoti
Paskelbta 2021-9-19 18:54:53 |
Xiaozha Publikuota 2021-9-19 17:01
Tai tikrai nėra gerai, dinaminis papildinys čia gali įkelti tik .net DLL, o DLL, skambinantys C++, nėra taip sureguliuoti...

Ar yra koks nors būdas iškviesti dll C++ tiesiogiai naudojant dll baitą[] baitų rinkinį, kad iškviestumėte viduje esančius metodus?
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com