Ausgeben von deklarativen Sicherheitsattributen
Das Ausgeben von deklarativen Sicherheitsattributen für dynamische Assemblys und deren Typen und Methoden entspricht funktional dem Codieren der .permission- und .permissionset-Deklarationen für Ilasm.exe (MSIL-Assembler) oder dem Anwenden des PermissionSetAttribute-Attributs im Quellcode für Visual Basic, C# oder C++. Es gibt aber Unterschiede zwischen dem Metadatenformat, mit dem ausgegebene Attribute gespeichert werden, und dem Format, mit dem kompilierte Attribute gespeichert werden, je nach Version von .NET Framework.
Metadatenformate für deklarative Sicherheit
Ein neues Metadatenformat zum Speichern deklarativer Sicherheitsattribute wurde zusätzlich zum ursprünglichen XML-Format in den Revisionen des ECMA-Standards von 2005 eingeführt. Weitere Informationen finden Sie in der Beschreibung zum PermissionSet-BLOB in der DeclSecurity-Tabelle (Abschnitt 22.11 in den Revisionen von 2005) in der ECMA Partition II-Dokumentation. Die Dokumentation ist online verfügbar, siehe ECMA C# and Common Language Infrastructure Standards auf MSDN und Standard ECMA-335 - Common Language Infrastructure (CLI) auf der Ecma International-Website.
In allen Versionen von .NET Framework wird mithilfe von Reflektionsausgabe angewendete deklarative Sicherheit im alten Metadatenformat gespeichert.
Deklarative Sicherheitsberechtigungen im mit Ilasm.exe (MSIL-Assembler) und Sprachcompilern in .NET Framework, Version 2.0, kompiliertem Code werden im neuen Format gespeichert.
Deklarative Sicherheitsberechtigungen im mit Ilasm.exe (MSIL-Assembler) und Sprachcompilern in .NET Framework, Versionen 1.0 und 1.1, kompiliertem Code werden im alten Format gespeichert.
Ausgeben von deklarativen Sicherheitsattributen
Deklarative Sicherheitsattribute können für Assemblys, Typen, Methoden und Konstruktoren ausgegeben werden. Für alle anderen Membertypen wird deklarative Sicherheit für die zugrunde liegenden Methoden ausgegeben.
Wichtig |
---|
Sie können keine deklarativen Sicherheitsattribute ausgeben, indem Sie PermissionSetAttribute-Objekte erstellen und diese mithilfe der SetCustomAttribute-Methode auf die dynamische Assembly, den Typen oder die Methode anwenden. |
Um deklarative Sicherheit für eine dynamische Assembly auszugeben, erstellen Sie eigene PermissionSet-Objekte, die die benötigten, optionalen und abgelehnten Berechtigungen enthalten. Übergeben Sie diese Berechtigungssätze an die entsprechende Überladung der DefineDynamicAssembly-Methode. Wenn es keine Berechtigungen gibt, die auf eine Kategorie angewendet werden sollen, geben Sie null für diesen Parameter an.
Wichtig Die benötigten, optionalen und abgelehnten Berechtigungen werden nicht verwendet, bis die dynamische Assembly gespeichert und wieder in den Speicher geladen wurde oder bis Sie eine Überladung der DefineDynamicAssembly-Methode verwenden, die die Beweise und die angeforderten Berechtigungen angibt, und ein Evidence-Objekt bereitstellen.Weitere Informationen finden Sie unter DefineDynamicAssembly.
Um deklarative Sicherheit für Typen, Methoden und Konstruktoren in einer dynamischen Assembly auszugeben, erstellen Sie ein PermissionSet-Objekt, das die Berechtigungen für jede SecurityAction enthält, die Sie anwenden möchten. Wenden Sie die Berechtigungen mithilfe der AddDeclarativeSecurity-Methode von TypeBuilder für Typen an, mithilfe der AddDeclarativeSecurity-Methode von ConstructorBuilder für Konstruktoren und mittels AddDeclarativeSecurity von MethodBuilder für Methoden.
Hinweis Deklarative Sicherheit wird nicht für dynamische Methoden unterstützt, die mit der DynamicMethod-Klasse definiert wurden.
Um deklarative Sicherheit für alle anderen Eigenschaften und Ereignisse auszugeben, wenden Sie die gewünschten Berechtigungssätze auf die zugrunde liegende(n) Methode(n) an, indem Sie die AddDeclarativeSecurity-Methode von MethodBuilder verwenden. Um zum Beispiel deklarative Sicherheit für eine Eigenschaft auszugeben, wenden Sie deklarative Sicherheit auf die get- und set-Accessormethoden der Eigenschaft an.
Während der Entwicklung von Code, der dynamische Assemblys ausgibt, wird empfohlen, dass Sie eine Überladung der DefineDynamicAssembly-Methode verwenden, die Beweise und Berechtigungen angibt, die Beweise zur Verfügung stellen, die die dynamische Assembly haben soll, und SecurityPermissionFlag.SkipVerification in refusedPermissions einschließen. SkipVerification abzulehnen stellt sicher, dass MSIL überprüft wird. Eine Einschränkung dieser Methode besteht darin, dass dadurch auch SecurityException ausgelöst wird, wenn dazu Code verwendet wird, der vollständige Vertrauenswürdigkeit erfordert.