public static SecurityDeclaration Permission2XmlSet()

in ILRepack/PermissionsetHelper.cs [55:96]


        public static SecurityDeclaration Permission2XmlSet(SecurityDeclaration declaration, ModuleDefinition targetModule)
        {
            if (!declaration.HasSecurityAttributes || declaration.SecurityAttributes.Count == 0)
                // nothing to convert
                return declaration;
            if (declaration.SecurityAttributes.Count > 1)
                throw new Exception("Cannot convert SecurityDeclaration with more than one attribute");

            SecurityAttribute sa = declaration.SecurityAttributes[0];
            if (sa.HasFields)
                throw new NotSupportedException("Cannot convert SecurityDeclaration with fields");

            TypeReference attrType = sa.AttributeType;
            AssemblyNameReference attrAsm = (AssemblyNameReference)attrType.Scope;
            string className = attrType.FullName + ", " + attrAsm.FullName;

            XmlDocument xmlDoc = new XmlDocument();

            XmlElement permissionSet = xmlDoc.CreateElement("PermissionSet");
            permissionSet.SetAttribute("class", "System.Security.PermissionSet");
            permissionSet.SetAttribute("version", "1");

            XmlElement iPermission = xmlDoc.CreateElement("IPermission");
            iPermission.SetAttribute("class", className);
            iPermission.SetAttribute("version", "1");
            foreach (var arg in sa.Properties)
            {
                iPermission.SetAttribute(arg.Name, arg.Argument.Value.ToString());
            }

            permissionSet.AppendChild(iPermission);
            xmlDoc.AppendChild(permissionSet);

            SecurityDeclaration xmlDeclaration = new SecurityDeclaration(declaration.Action);
            SecurityAttribute attribute = new SecurityAttribute(GetTypeRef("System.Security.Permissions", "PermissionSetAttribute", "mscorlib", targetModule));

            attribute.Properties.Add(new CustomAttributeNamedArgument("XML",
                new CustomAttributeArgument(targetModule.TypeSystem.String, xmlDoc.InnerXml)));

            xmlDeclaration.SecurityAttributes.Add(attribute);
            return xmlDeclaration;
        }