예제 #1
0
        public static AssemblyInfo FromXml(Project project, XmlReader reader, Variables vars)
        {
            Debug.Assert (reader.NodeType == XmlNodeType.Element && reader.Name == "Module");

            AssemblyInfo info = new AssemblyInfo (project);

            // pull out the file attribute, but don't process anything empty
            string val = Helper.GetAttribute (reader, "file", vars);
            if (val.Length > 0) {
                info.LoadAssembly (val);

                if (AssemblyIsSigned (info.Definition) && project.Settings.KeyFile == null)
                    throw new ObfuscarException ("Obfuscating a signed assembly would result in an invalid assembly:  " + info.Name + "; use the KeyFile property to set a key to use");
            } else
                throw new InvalidOperationException ("Need valid file attribute.");

            string isExcluded = Helper.GetAttribute (reader, "Exclude", vars);
            if ((isExcluded.Length > 0) && (isExcluded.ToLowerInvariant () == "true")) {
                info.Exclude = true;
            }

            if (!reader.IsEmptyElement) {
                while (reader.Read ()) {
                    if (reader.NodeType == XmlNodeType.Element) {
                        string name = Helper.GetAttribute (reader, "name", vars);

                        string rxStr = Helper.GetAttribute (reader, "rx");
                        Regex rx = null;
                        if (!string.IsNullOrEmpty (rxStr)) {
                            rx = new Regex (rxStr);
                        }

                        string isStaticStr = Helper.GetAttribute (reader, "static", vars);
                        bool? isStatic = null;
                        if (!string.IsNullOrEmpty (isStaticStr)) {
                            isStatic = XmlConvert.ToBoolean (isStaticStr);
                        }

                        string isSerializableStr = Helper.GetAttribute (reader, "serializable", vars);
                        bool? isSerializable = null;
                        if (!string.IsNullOrEmpty (isSerializableStr)) {
                            isSerializable = XmlConvert.ToBoolean (isSerializableStr);
                        }

                        string attrib = Helper.GetAttribute (reader, "attrib", vars);
                        string inherits = Helper.GetAttribute (reader, "typeinherits", vars);
                        string type = Helper.GetAttribute (reader, "type", vars);
                        string typeattrib = Helper.GetAttribute (reader, "typeattrib", vars);

                        switch (reader.Name) {
                        case "SkipNamespace":
                            if (rx != null) {
                                info.skipNamespaces.Add (new NamespaceTester (rx));
                            } else {
                                info.skipNamespaces.Add (new NamespaceTester (name));
                            }
                            break;
                        case "ForceNamespace":
                            if (rx != null) {
                                info.forceNamespaces.Add (new NamespaceTester (rx));
                            } else {
                                info.forceNamespaces.Add (new NamespaceTester (name));
                            }
                            break;
                        case "SkipType":
                            TypeAffectFlags skipFlags = TypeAffectFlags.SkipNone;

                            val = Helper.GetAttribute (reader, "skipMethods", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean (val))
                                skipFlags |= TypeAffectFlags.AffectMethod;

                            val = Helper.GetAttribute (reader, "skipStringHiding", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean (val))
                                skipFlags |= TypeAffectFlags.AffectString;

                            val = Helper.GetAttribute (reader, "skipFields", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean (val))
                                skipFlags |= TypeAffectFlags.AffectField;

                            val = Helper.GetAttribute (reader, "skipProperties", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean (val))
                                skipFlags |= TypeAffectFlags.AffectProperty;

                            val = Helper.GetAttribute (reader, "skipEvents", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean (val))
                                skipFlags |= TypeAffectFlags.AffectEvent;

                            if (rx != null) {
                                info.skipTypes.Add (new TypeTester (rx, skipFlags, attrib, inherits, isStatic, isSerializable));
                            } else {
                                info.skipTypes.Add (new TypeTester (name, skipFlags, attrib, inherits, isStatic, isSerializable));
                            }
                            break;
                        case "ForceType":
                            TypeAffectFlags forceFlags = TypeAffectFlags.SkipNone;

                            val = Helper.GetAttribute (reader, "forceMethods", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean (val))
                                forceFlags |= TypeAffectFlags.AffectMethod;

                            val = Helper.GetAttribute (reader, "forceStringHiding", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean (val))
                                forceFlags |= TypeAffectFlags.AffectString;

                            val = Helper.GetAttribute (reader, "forceFields", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean (val))
                                forceFlags |= TypeAffectFlags.AffectField;

                            val = Helper.GetAttribute (reader, "forceProperties", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean (val))
                                forceFlags |= TypeAffectFlags.AffectProperty;

                            val = Helper.GetAttribute (reader, "forceEvents", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean (val))
                                forceFlags |= TypeAffectFlags.AffectEvent;

                            if (rx != null) {
                                info.forceTypes.Add (new TypeTester (rx, forceFlags, attrib, inherits, isStatic, isSerializable));
                            } else {
                                info.forceTypes.Add (new TypeTester (name, forceFlags, attrib, inherits, isStatic, isSerializable));
                            }
                            break;
                        case "SkipMethod":
                            if (rx != null) {
                                info.skipMethods.Add (new MethodTester (rx, type, attrib, typeattrib, inherits, isStatic));
                            } else {
                                info.skipMethods.Add (new MethodTester (name, type, attrib, typeattrib, inherits, isStatic));
                            }
                            break;
                        case "ForceMethod":
                            if (rx != null) {
                                info.forceMethods.Add (new MethodTester (rx, type, attrib, typeattrib, inherits, isStatic));
                            } else {
                                info.forceMethods.Add (new MethodTester (name, type, attrib, typeattrib, inherits, isStatic));
                            }
                            break;
                        case "SkipStringHiding":
                            if (rx != null) {
                                info.skipStringHiding.Add (new MethodTester (rx, type, attrib, typeattrib));
                            } else {
                                info.skipStringHiding.Add (new MethodTester (name, type, attrib, typeattrib));
                            }
                            break;
                        case "ForceStringHiding":
                            if (rx != null) {
                                info.forceStringHiding.Add (new MethodTester (rx, type, attrib, typeattrib));
                            } else {
                                info.forceStringHiding.Add (new MethodTester (name, type, attrib, typeattrib));
                            }
                            break;
                        case "SkipField":
                            string decorator = Helper.GetAttribute (reader, "decorator", vars);

                            if (rx != null) {
                                info.skipFields.Add (new FieldTester (rx, type, attrib, typeattrib, inherits, decorator, isStatic, isSerializable));
                            } else {
                                info.skipFields.Add (new FieldTester (name, type, attrib, typeattrib, inherits, decorator, isStatic, isSerializable));
                            }
                            break;
                        case "ForceField":
                            string decorator1 = Helper.GetAttribute (reader, "decorator", vars);

                            if (rx != null) {
                                info.forceFields.Add (new FieldTester (rx, type, attrib, typeattrib, inherits, decorator1, isStatic, isSerializable));
                            } else {
                                info.forceFields.Add (new FieldTester (name, type, attrib, typeattrib, inherits, decorator1, isStatic, isSerializable));
                            }
                            break;
                        case "SkipProperty":
                            if (rx != null) {
                                info.skipProperties.Add (new PropertyTester (rx, type, attrib, typeattrib));
                            } else {
                                info.skipProperties.Add (new PropertyTester (name, type, attrib, typeattrib));
                            }
                            break;
                        case "ForceProperty":
                            if (rx != null) {
                                info.forceProperties.Add (new PropertyTester (rx, type, attrib, typeattrib));
                            } else {
                                info.forceProperties.Add (new PropertyTester (name, type, attrib, typeattrib));
                            }
                            break;
                        case "SkipEvent":
                            if (rx != null) {
                                info.skipEvents.Add (new EventTester (rx, type, attrib, typeattrib));
                            } else {
                                info.skipEvents.Add (new EventTester (name, type, attrib, typeattrib));
                            }
                            break;
                        case "ForceEvent":
                            if (rx != null) {
                                info.forceEvents.Add (new EventTester (rx, type, attrib, typeattrib));
                            } else {
                                info.forceEvents.Add (new EventTester (name, type, attrib, typeattrib));
                            }
                            break;
                        case "SkipEnums":
                            var skipEnumsValue = Helper.GetAttribute (reader, "value");
                            info.skipEnums = skipEnumsValue.Length > 0 && XmlConvert.ToBoolean (skipEnumsValue);
                            break;
                        }
                    } else if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "Module") {
                        // hit end of module element...stop reading
                        break;
                    }
                }
            }

            return info;
        }
예제 #2
0
        internal static AssemblyInfo FromXml( Project project, XmlReader reader, Variables vars )
        {
            Debug.Assert( reader.NodeType == XmlNodeType.Element && reader.Name == "Module" );

            AssemblyInfo info = new AssemblyInfo( project );

            // pull out the file attribute, but don't process anything empty
            string val = Helper.GetAttribute( reader, "file", vars );
            if ( val.Length > 0 )
            {
                info.LoadAssembly( val );

                if ( AssemblyIsSigned( info.Definition ) && project.KeyValue == null )
                    throw new ApplicationException( "Obfuscating a signed assembly would result in an invalid assembly:  " + info.Name +"; use the KeyValue property to set a key to use" );
            }
            else
                throw new InvalidOperationException( "Need valid file attribute." );

            string isExcluded = Helper.GetAttribute(reader, "Exclude", vars);
            if ((isExcluded.Length > 0) && (isExcluded.ToLowerInvariant() == "true"))
            {
                info.Exclude = true;
            }

            if ( !reader.IsEmptyElement )
            {
                while ( reader.Read( ) )
                {
                    if ( reader.NodeType == XmlNodeType.Element )
                    {
                        switch ( reader.Name )
                        {
                            case "SkipNamespace":
                                {
                                    val = Helper.GetAttribute(reader, "name", vars);
                                    if (val.Length > 0)
                                        info.skipNamespaces.Add(new NamespaceTester(val));
                                }
                                break;
                            case "SkipType":
                                {
                                    val = Helper.GetAttribute(reader, "name", vars);
                                    if (val.Length > 0)
                                    {
                                        string typeName = val;

                                        TypeSkipFlags skipFlags = TypeSkipFlags.SkipNone;

                                        val = Helper.GetAttribute(reader, "skipMethods", vars);
                                        if ( val.Length > 0 && XmlConvert.ToBoolean( val ) )
                                            skipFlags |= TypeSkipFlags.SkipMethod;

                                        val = Helper.GetAttribute(reader, "skipStringHiding", vars);
                                        if (val.Length > 0 && XmlConvert.ToBoolean(val))
                                            skipFlags |= TypeSkipFlags.SkipStringHiding;

                                        val = Helper.GetAttribute(reader, "skipFields", vars);
                                        if ( val.Length > 0 && XmlConvert.ToBoolean( val ) )
                                            skipFlags |= TypeSkipFlags.SkipField;

                                        val = Helper.GetAttribute(reader, "skipProperties", vars);
                                        if ( val.Length > 0 && XmlConvert.ToBoolean( val ) )
                                            skipFlags |= TypeSkipFlags.SkipProperty;

                                        val = Helper.GetAttribute(reader, "skipEvents", vars);
                                        if ( val.Length > 0 && XmlConvert.ToBoolean( val ) )
                                            skipFlags |= TypeSkipFlags.SkipEvent;

                                        info.skipTypes.Add(new TypeTester(typeName, skipFlags));
                                    }
                                }
                                break;
                            case "SkipMethod":
                                {
                                    val = Helper.GetAttribute( reader, "name", vars );
                                    string type = Helper.GetAttribute( reader, "type", vars );
                                    string attrib = Helper.GetAttribute( reader, "attrib", vars );

                                    if ( val.Length > 0 )
                                        info.skipMethods.Add( new MethodTester( val, type, attrib ) );
                                    else
                                    {
                                        val = Helper.GetAttribute( reader, "rx" );
                                        if ( val.Length > 0 )
                                            info.skipMethods.Add( new MethodTester( new Regex( val ), type, attrib ) );
                                    }
                                }
                                break;
                            case "SkipStringHiding":
                                {
                                    val = Helper.GetAttribute(reader, "name", vars);
                                    string type = Helper.GetAttribute(reader, "type", vars);
                                    string attrib = Helper.GetAttribute(reader, "attrib", vars);

                                    if (val.Length > 0)
                                        info.skipStringHiding.Add(new MethodTester(val, type, attrib));
                                    else
                                    {
                                        val = Helper.GetAttribute(reader, "rx");
                                        if (val.Length > 0)
                                            info.skipStringHiding.Add(new MethodTester(new Regex(val), type, attrib));
                                    }
                                }
                                break;
                            case "SkipField":
                                {
                                    val = Helper.GetAttribute( reader, "name", vars );
                                    string type = Helper.GetAttribute( reader, "type", vars );
                                    string attrib = Helper.GetAttribute( reader, "attrib", vars );

                                    if ( val.Length > 0 )
                                        info.skipFields.Add( new FieldTester( val, type, attrib ) );
                                    else
                                    {
                                        val = Helper.GetAttribute( reader, "rx" );
                                        if ( val.Length > 0 )
                                            info.skipFields.Add( new FieldTester( new Regex( val ), type, attrib ) );
                                    }
                                }
                                break;
                            case "SkipProperty":
                                {
                                    val = Helper.GetAttribute( reader, "name", vars );
                                    string type = Helper.GetAttribute( reader, "type", vars );
                                    string attrib = Helper.GetAttribute( reader, "attrib", vars );

                                    if ( val.Length > 0 )
                                        info.skipProperties.Add( new PropertyTester( val, type, attrib ) );
                                    else
                                    {
                                        val = Helper.GetAttribute( reader, "rx" );
                                        if ( val.Length > 0 )
                                            info.skipProperties.Add( new PropertyTester( new Regex( val ), type, attrib ) );
                                    }
                                }
                                break;
                            case "SkipEvent":
                                {
                                    val = Helper.GetAttribute( reader, "name", vars );
                                    string type = Helper.GetAttribute( reader, "type", vars );
                                    string attrib = Helper.GetAttribute( reader, "attrib", vars );

                                    if ( val.Length > 0 )
                                        info.skipEvents.Add( new EventTester( val, type, attrib ) );
                                    else
                                    {
                                        val = Helper.GetAttribute( reader, "rx" );
                                        if ( val.Length > 0 )
                                            info.skipEvents.Add( new EventTester( new Regex( val ), type, attrib ) );
                                    }
                                }
                                break;
                        }
                    }
                    else if ( reader.NodeType == XmlNodeType.EndElement && reader.Name == "Module" )
                    {
                        // hit end of module element...stop reading
                        break;
                    }
                }
            }

            return info;
        }
예제 #3
0
 private static Node <AssemblyInfo> SearchNode(AssemblyInfo baseType, List <Node <AssemblyInfo> > nodes)
 {
     return(nodes.FirstOrDefault(node => node.Item == baseType));
 }
예제 #4
0
        public static AssemblyInfo FromXml(Project project, XmlReader reader, Variables vars)
        {
            Debug.Assert(reader.NodeType == XmlNodeType.Element && reader.Name == "Module");

            AssemblyInfo info = new AssemblyInfo(project);

            // pull out the file attribute, but don't process anything empty
            string val = Helper.GetAttribute(reader, "file", vars);

            if (val.Length > 0)
            {
                info.LoadAssembly(val);

                if (AssemblyIsSigned(info.Definition) && project.Settings.KeyFile == null)
                {
                    throw new ObfuscarException("Obfuscating a signed assembly would result in an invalid assembly:  " + info.Name + "; use the KeyFile property to set a key to use");
                }
            }
            else
            {
                throw new InvalidOperationException("Need valid file attribute.");
            }

            string isExcluded = Helper.GetAttribute(reader, "Exclude", vars);

            if ((isExcluded.Length > 0) && (isExcluded.ToLowerInvariant() == "true"))
            {
                info.Exclude = true;
            }

            if (!reader.IsEmptyElement)
            {
                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        string name = Helper.GetAttribute(reader, "name", vars);

                        string rxStr = Helper.GetAttribute(reader, "rx");
                        Regex  rx    = null;
                        if (!string.IsNullOrEmpty(rxStr))
                        {
                            rx = new Regex(rxStr);
                        }

                        string isStaticStr = Helper.GetAttribute(reader, "static", vars);
                        bool?  isStatic    = null;
                        if (!string.IsNullOrEmpty(isStaticStr))
                        {
                            isStatic = XmlConvert.ToBoolean(isStaticStr);
                        }

                        string isSerializableStr = Helper.GetAttribute(reader, "serializable", vars);
                        bool?  isSerializable    = null;
                        if (!string.IsNullOrEmpty(isSerializableStr))
                        {
                            isSerializable = XmlConvert.ToBoolean(isSerializableStr);
                        }

                        string attrib     = Helper.GetAttribute(reader, "attrib", vars);
                        string inherits   = Helper.GetAttribute(reader, "typeinherits", vars);
                        string type       = Helper.GetAttribute(reader, "type", vars);
                        string typeattrib = Helper.GetAttribute(reader, "typeattrib", vars);

                        switch (reader.Name)
                        {
                        case "SkipNamespace":
                            if (rx != null)
                            {
                                info.skipNamespaces.Add(new NamespaceTester(rx));
                            }
                            else
                            {
                                info.skipNamespaces.Add(new NamespaceTester(name));
                            }
                            break;

                        case "ForceNamespace":
                            if (rx != null)
                            {
                                info.forceNamespaces.Add(new NamespaceTester(rx));
                            }
                            else
                            {
                                info.forceNamespaces.Add(new NamespaceTester(name));
                            }
                            break;

                        case "SkipType":
                            TypeAffectFlags skipFlags = TypeAffectFlags.SkipNone;

                            val = Helper.GetAttribute(reader, "skipMethods", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean(val))
                            {
                                skipFlags |= TypeAffectFlags.AffectMethod;
                            }

                            val = Helper.GetAttribute(reader, "skipStringHiding", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean(val))
                            {
                                skipFlags |= TypeAffectFlags.SkipStringHiding;
                            }

                            val = Helper.GetAttribute(reader, "skipFields", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean(val))
                            {
                                skipFlags |= TypeAffectFlags.AffectField;
                            }

                            val = Helper.GetAttribute(reader, "skipProperties", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean(val))
                            {
                                skipFlags |= TypeAffectFlags.AffectProperty;
                            }

                            val = Helper.GetAttribute(reader, "skipEvents", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean(val))
                            {
                                skipFlags |= TypeAffectFlags.AffectEvent;
                            }

                            if (rx != null)
                            {
                                info.skipTypes.Add(new TypeTester(rx, skipFlags, attrib, inherits, isStatic, isSerializable));
                            }
                            else
                            {
                                info.skipTypes.Add(new TypeTester(name, skipFlags, attrib, inherits, isStatic, isSerializable));
                            }
                            break;

                        case "ForceType":
                            TypeAffectFlags forceFlags = TypeAffectFlags.SkipNone;

                            val = Helper.GetAttribute(reader, "forceMethods", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean(val))
                            {
                                forceFlags |= TypeAffectFlags.AffectMethod;
                            }

                            val = Helper.GetAttribute(reader, "forceFields", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean(val))
                            {
                                forceFlags |= TypeAffectFlags.AffectField;
                            }

                            val = Helper.GetAttribute(reader, "forceProperties", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean(val))
                            {
                                forceFlags |= TypeAffectFlags.AffectProperty;
                            }

                            val = Helper.GetAttribute(reader, "forceEvents", vars);
                            if (val.Length > 0 && XmlConvert.ToBoolean(val))
                            {
                                forceFlags |= TypeAffectFlags.AffectEvent;
                            }

                            if (rx != null)
                            {
                                info.forceTypes.Add(new TypeTester(rx, forceFlags, attrib, inherits, isStatic, isSerializable));
                            }
                            else
                            {
                                info.forceTypes.Add(new TypeTester(name, forceFlags, attrib, inherits, isStatic, isSerializable));
                            }
                            break;

                        case "SkipMethod":
                            if (rx != null)
                            {
                                info.skipMethods.Add(new MethodTester(rx, type, attrib, typeattrib, inherits, isStatic));
                            }
                            else
                            {
                                info.skipMethods.Add(new MethodTester(name, type, attrib, typeattrib, inherits, isStatic));
                            }
                            break;

                        case "ForceMethod":
                            if (rx != null)
                            {
                                info.forceMethods.Add(new MethodTester(rx, type, attrib, typeattrib, inherits, isStatic));
                            }
                            else
                            {
                                info.forceMethods.Add(new MethodTester(name, type, attrib, typeattrib, inherits, isStatic));
                            }
                            break;

                        case "SkipStringHiding":
                            if (rx != null)
                            {
                                info.skipStringHiding.Add(new MethodTester(rx, type, attrib, typeattrib));
                            }
                            else
                            {
                                info.skipStringHiding.Add(new MethodTester(name, type, attrib, typeattrib));
                            }
                            break;

                        case "SkipField":
                            string decorator = Helper.GetAttribute(reader, "decorator", vars);

                            if (rx != null)
                            {
                                info.skipFields.Add(new FieldTester(rx, type, attrib, typeattrib, inherits, decorator, isStatic, isSerializable));
                            }
                            else
                            {
                                info.skipFields.Add(new FieldTester(name, type, attrib, typeattrib, inherits, decorator, isStatic, isSerializable));
                            }
                            break;

                        case "ForceField":
                            string decorator1 = Helper.GetAttribute(reader, "decorator", vars);

                            if (rx != null)
                            {
                                info.forceFields.Add(new FieldTester(rx, type, attrib, typeattrib, inherits, decorator1, isStatic, isSerializable));
                            }
                            else
                            {
                                info.forceFields.Add(new FieldTester(name, type, attrib, typeattrib, inherits, decorator1, isStatic, isSerializable));
                            }
                            break;

                        case "SkipProperty":
                            if (rx != null)
                            {
                                info.skipProperties.Add(new PropertyTester(rx, type, attrib, typeattrib));
                            }
                            else
                            {
                                info.skipProperties.Add(new PropertyTester(name, type, attrib, typeattrib));
                            }
                            break;

                        case "ForceProperty":
                            if (rx != null)
                            {
                                info.forceProperties.Add(new PropertyTester(rx, type, attrib, typeattrib));
                            }
                            else
                            {
                                info.forceProperties.Add(new PropertyTester(name, type, attrib, typeattrib));
                            }
                            break;

                        case "SkipEvent":
                            if (rx != null)
                            {
                                info.skipEvents.Add(new EventTester(rx, type, attrib, typeattrib));
                            }
                            else
                            {
                                info.skipEvents.Add(new EventTester(name, type, attrib, typeattrib));
                            }
                            break;

                        case "ForceEvent":
                            if (rx != null)
                            {
                                info.forceEvents.Add(new EventTester(rx, type, attrib, typeattrib));
                            }
                            else
                            {
                                info.forceEvents.Add(new EventTester(name, type, attrib, typeattrib));
                            }
                            break;
                        }
                    }
                    else if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "Module")
                    {
                        // hit end of module element...stop reading
                        break;
                    }
                }
            }

            return(info);
        }
예제 #5
0
        public static AssemblyInfo FromXml(Project project, XmlReader reader, Variables vars)
        {
            Debug.Assert(reader.NodeType == XmlNodeType.Element && reader.Name == "Module");

            AssemblyInfo info = new AssemblyInfo(project);

            // pull out the file attribute, but don't process anything empty
            string val = Helper.GetAttribute(reader, "file", vars);

            if (val.Length > 0)
            {
                info.LoadAssembly(val);

                if (AssemblyIsSigned(info.Definition) && project.Settings.KeyFile == null)
                {
                    throw new ApplicationException("Obfuscating a signed assembly would result in an invalid assembly:  " + info.Name + "; use the KeyFile property to set a key to use");
                }
            }
            else
            {
                throw new InvalidOperationException("Need valid file attribute.");
            }

            if (!reader.IsEmptyElement)
            {
                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        switch (reader.Name)
                        {
                        case "SkipNamespace":
                        {
                            val = Helper.GetAttribute(reader, "name", vars);
                            if (val.Length > 0)
                            {
                                info.skipNamespaces.Add(new NamespaceTester(val));
                            }
                        }
                        break;

                        case "SkipType":
                        {
                            val = Helper.GetAttribute(reader, "name", vars);
                            string attrib = Helper.GetAttribute(reader, "attrib", vars);
                            if (val.Length > 0)
                            {
                                string typeName = val;

                                TypeSkipFlags skipFlags = TypeSkipFlags.SkipNone;

                                val = Helper.GetAttribute(reader, "skipMethods", vars);
                                if (val.Length > 0 && XmlConvert.ToBoolean(val))
                                {
                                    skipFlags |= TypeSkipFlags.SkipMethod;
                                }

                                val = Helper.GetAttribute(reader, "skipStringHiding", vars);
                                if (val.Length > 0 && XmlConvert.ToBoolean(val))
                                {
                                    skipFlags |= TypeSkipFlags.SkipStringHiding;
                                }

                                val = Helper.GetAttribute(reader, "skipFields", vars);
                                if (val.Length > 0 && XmlConvert.ToBoolean(val))
                                {
                                    skipFlags |= TypeSkipFlags.SkipField;
                                }

                                val = Helper.GetAttribute(reader, "skipProperties", vars);
                                if (val.Length > 0 && XmlConvert.ToBoolean(val))
                                {
                                    skipFlags |= TypeSkipFlags.SkipProperty;
                                }

                                val = Helper.GetAttribute(reader, "skipEvents", vars);
                                if (val.Length > 0 && XmlConvert.ToBoolean(val))
                                {
                                    skipFlags |= TypeSkipFlags.SkipEvent;
                                }

                                info.skipTypes.Add(new TypeTester(typeName, skipFlags, attrib));
                            }
                        }
                        break;

                        case "SkipMethod":
                        {
                            val = Helper.GetAttribute(reader, "name", vars);
                            string type       = Helper.GetAttribute(reader, "type", vars);
                            string attrib     = Helper.GetAttribute(reader, "attrib", vars);
                            string typeattrib = Helper.GetAttribute(reader, "typeattrib", vars);

                            if (val.Length > 0)
                            {
                                info.skipMethods.Add(new MethodTester(val, type, attrib, typeattrib));
                            }
                            else
                            {
                                val = Helper.GetAttribute(reader, "rx");
                                if (val.Length > 0)
                                {
                                    info.skipMethods.Add(new MethodTester(new Regex(val), type, attrib, typeattrib));
                                }
                            }
                        }
                        break;

                        case "SkipStringHiding":
                        {
                            val = Helper.GetAttribute(reader, "name", vars);
                            string type       = Helper.GetAttribute(reader, "type", vars);
                            string attrib     = Helper.GetAttribute(reader, "attrib", vars);
                            string typeattrib = Helper.GetAttribute(reader, "typeattrib", vars);


                            if (val.Length > 0)
                            {
                                info.skipStringHiding.Add(new MethodTester(val, type, attrib, typeattrib));
                            }
                            else
                            {
                                val = Helper.GetAttribute(reader, "rx");
                                if (val.Length > 0)
                                {
                                    info.skipStringHiding.Add(new MethodTester(new Regex(val), type, attrib, typeattrib));
                                }
                            }
                        }
                        break;

                        case "SkipField":
                        {
                            val = Helper.GetAttribute(reader, "name", vars);
                            string type       = Helper.GetAttribute(reader, "type", vars);
                            string attrib     = Helper.GetAttribute(reader, "attrib", vars);
                            string typeattrib = Helper.GetAttribute(reader, "typeattrib", vars);

                            if (val.Length > 0)
                            {
                                info.skipFields.Add(new FieldTester(val, type, attrib, typeattrib));
                            }
                            else
                            {
                                val = Helper.GetAttribute(reader, "rx");
                                if (val.Length > 0)
                                {
                                    info.skipFields.Add(new FieldTester(new Regex(val), type, attrib, typeattrib));
                                }
                            }
                        }
                        break;

                        case "SkipProperty":
                        {
                            val = Helper.GetAttribute(reader, "name", vars);
                            string type       = Helper.GetAttribute(reader, "type", vars);
                            string attrib     = Helper.GetAttribute(reader, "attrib", vars);
                            string typeattrib = Helper.GetAttribute(reader, "typeattrib", vars);

                            if (val.Length > 0)
                            {
                                info.skipProperties.Add(new PropertyTester(val, type, attrib, typeattrib));
                            }
                            else
                            {
                                val = Helper.GetAttribute(reader, "rx");
                                if (val.Length > 0)
                                {
                                    info.skipProperties.Add(new PropertyTester(new Regex(val), type, attrib, typeattrib));
                                }
                            }
                        }
                        break;

                        case "SkipEvent":
                        {
                            val = Helper.GetAttribute(reader, "name", vars);
                            string type       = Helper.GetAttribute(reader, "type", vars);
                            string attrib     = Helper.GetAttribute(reader, "attrib", vars);
                            string typeattrib = Helper.GetAttribute(reader, "typeattrib", vars);

                            if (val.Length > 0)
                            {
                                info.skipEvents.Add(new EventTester(val, type, attrib, typeattrib));
                            }
                            else
                            {
                                val = Helper.GetAttribute(reader, "rx");
                                if (val.Length > 0)
                                {
                                    info.skipEvents.Add(new EventTester(new Regex(val), type, attrib, typeattrib));
                                }
                            }
                        }
                        break;
                        }
                    }
                    else if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "Module")
                    {
                        // hit end of module element...stop reading
                        break;
                    }
                }
            }

            return(info);
        }