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

Skats: 50355|Atbildi: 0

[Avots] .NET/C# Izstaro dinamiski ģenerē komplektus

[Kopēt saiti]
Publicēts 2021-3-21 12:38:34 | | | |
Lietojumprogrammu scenāriji, izmantojot mūsu C# kodu, dinamiski ģenerē EXE, tā lietojumprogrammu scenāriji var būt ļoti daudz, piemēram, programmatūras autorizācija, jūs varat ievadīt autorizācijas informāciju, ģenerēt autorizētu DLL utt., Tātad, kā sasniegt šo funkciju, mums ir jāpiemin tehniskais Emit.

1. Pārskats par emisiju

Izstaro, var saukt par emitējošu vai ģenerējošu. Ietvarā klases, kas saistītas ar Emit, būtībā pastāv System.Reflection.Emit nosaukumtelpā. Var redzēt, ka Emit pastāv kā pārdomu elements. Runājot par pārdomām, ikvienam tas ir jāzina, tas ļauj mums apskatīt montāžas elementus, lai iegūtu lielu informācijas daudzumu, piemēram, kādus veidus satur montāža, kādas metodes satur tips utt. Bet atspulgus var tikai "redzēt", savukārt Emit var dinamiski ģenerēt kodu izpildlaikā. Apskatīsim, kā ģenerēt kodu ar Emit.

2. Montāža un pārvaldītais modulis

Montāža ir viena vai vairāku moduļu, resursu failu loģiska grupa, un sekundāri montāža ir mazākā atkārtotas izmantošanas, drošības un versiju izveides vienība. DLL un EXE, ko mēs redzam, var saukt par montāžu, montāža satur vairākus moduļus, bet parasti, kad mēs VS kompilējam, mēs kompilēsim tikai vienu moduli, ja mēs vēlamies apkopot vairākus moduļus montāžā, mums ir jāizmanto csc.exe ieviešana.

3. Dinamiski ģenerējiet koda operācijas

Pirmkārt, mums ir jāsaprot, kāda veida katrs dinamiskais tips ir attēlots .NET.

Montāža: System.Reflection.Emit.AssemblyBuilder (definē un attēlo dinamiskos komplektus)

Konstruktors: System.Reflection.Emit.ConstructorBuilder (konstruktors, kas definē un attēlo dinamiskās klases)

Pielāgots atribūts: System.Reflection.Emit.CustomAttributeBuilder (palīdz ģenerēt pielāgotus atribūtus, izmantojot konstruktora nodotos parametrus, lai ģenerētu atribūtus klasēm)

Enum: System.Reflection.Emit.EnumBuilder (izskaidro un norāda uzskaitījuma tipu)

Notikums: System.Reflection.Emit.EventBuilder (notikums, kas definē klasi)

Lauks: System.Reflection.Emit.FieldBuilder (definē un attēlo laukus.) nevar mantot šādu šķiru)

Lokālie mainīgie: System.Reflection.Emit.LocalBuilder (attēlo lokālos mainīgos metodē vai konstruktorā)

Metode: System.Reflection.Emit.MethodBuilder (metode (vai konstruktors), kas definē un attēlo dinamisko klasi)

Modulis: System.Reflection.Emit.ModuleBuilder (definē un attēlo moduļus dinamiskos mezglos)

Parametrs: System.Reflection.Emit.ParameterBuilder (izveidojiet vai saistiet parametru informāciju, piemēram, metodes parametrus, notikumu parametrus utt.)

Rekvizīts: System.Reflection.Emit.PropertyBuilder (rekvizīta tipa definēšana)

Klase: System.Reflection.Emit.TypeBuilder (definējiet un izveidojiet jaunu klases instanci izpildlaikā)

OpCode ir starpposma valodas (IL) direktīvas apraksts. Tam ir daudz norādījumu, varat pārbaudīt oficiālo Microsoft vietni:Hipersaites pieteikšanās ir redzama.

AssemblyBuilderAccess piekļuves ierobežojumi

AssemblyBuilderAccess.Run; Norāda, ka montāžu var izpildīt, bet ne saglabāt.
AssemblyBuilderAccess.Save; Norāda, ka montāžu var saglabāt, bet ne izpildīt.
AssemblyBuilderAccess.RunAndSave; Norāda, ka montāžu var saglabāt un izpildīt.
AssemblyBuilderAccess.ReflectionOnly; Norāda, ka komplektus var izmantot tikai atstarojošā kontekstā un tos nevar izpildīt.
AssemblyBuilderAccess.RunAndCollect; Norāda, ka montāžu var izlādēt un atmiņu atgūt.

Kods ir šāds:

Pirmkārt, izmantojiet emit, lai ģenerētu IL kodu, pēc tam dinamiski ģenerējiet montāžu un, visbeidzot, ielādējiet montāžu un izsauciet tās metodes, kā parādīts zemāk redzamajā attēlā:



Izmantojiet ILSpy, lai skatītu ģenerēto kodu, kā parādīts zemāk redzamajā attēlā:



(Beigas)





Iepriekšējo:Atšķirība starp Roslyn MSBuild kompilatoru
Nākamo:.NET/C# atstarošana, izstarošana, izteiksmes veiktspējas testēšana
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