internal void AddDeclarativeSecurity(int token, List <CustomAttributeBuilder> declarativeSecurity) { Dictionary <int, List <CustomAttributeBuilder> > ordered = new Dictionary <int, List <CustomAttributeBuilder> >(); foreach (CustomAttributeBuilder cab in declarativeSecurity) { int action; // check for HostProtectionAttribute without SecurityAction if (cab.ConstructorArgumentCount == 0) { action = (int)System.Security.Permissions.SecurityAction.LinkDemand; } else { action = (int)cab.GetConstructorArgument(0); } List <CustomAttributeBuilder> list; if (!ordered.TryGetValue(action, out list)) { list = new List <CustomAttributeBuilder>(); ordered.Add(action, list); } list.Add(cab); } foreach (KeyValuePair <int, List <CustomAttributeBuilder> > kv in ordered) { DeclSecurityTable.Record rec = new DeclSecurityTable.Record(); rec.Action = (short)kv.Key; rec.Parent = token; rec.PermissionSet = WriteDeclSecurityBlob(kv.Value); this.DeclSecurity.AddRecord(rec); } }
internal void AddDeclarativeSecurity(int token, System.Security.Permissions.SecurityAction securityAction, System.Security.PermissionSet permissionSet) { DeclSecurityTable.Record rec = new DeclSecurityTable.Record(); rec.Action = (short)securityAction; rec.Parent = token; // like Ref.Emit, we're using the .NET 1.x xml format rec.PermissionSet = this.Blobs.Add(ByteBuffer.Wrap(System.Text.Encoding.Unicode.GetBytes(permissionSet.ToXml().ToString()))); this.DeclSecurity.AddRecord(rec); }