public void CheckBadReplace () { Variables variables = new Variables (); variables.Add ("Key1", "Value1"); var exception = Assert.Throws<ObfuscarException>(() => { variables.Replace("$(Unreplaceable)"); }); Assert.AreEqual("Unable to replace variable: Unreplaceable", exception.Message); }
public void CheckReplace () { Variables variables = new Variables (); variables.Add ("Key1", "Value1"); string result = variables.Replace ("This: $(Key1) got replaced."); Assert.AreEqual ("This: Value1 got replaced.", result); }
public void CheckReplace() { Obfuscar.Variables variables = new Obfuscar.Variables(); variables.Add("Key1", "Value1"); string result = variables.Replace("This: $(Key1) got replaced."); Assert.AreEqual("This: Value1 got replaced.", result); }
public void CheckBadReplace() { Obfuscar.Variables variables = new Obfuscar.Variables(); variables.Add("Key1", "Value1"); TestUtils.AssertThrows(delegate { variables.Replace("$(Unreplaceable)"); }, typeof(ObfuscarException), "Unable", "replace", "Unreplaceable"); }
public Settings(Variables vars) { inPath = vars.GetValue("InPath", "."); outPath = vars.GetValue("OutPath", "."); markedOnly = XmlConvert.ToBoolean(vars.GetValue("MarkedOnly", "false")); renameProperties = XmlConvert.ToBoolean(vars.GetValue("RenameProperties", "true")); renameEvents = XmlConvert.ToBoolean(vars.GetValue("RenameEvents", "true")); reuseNames = XmlConvert.ToBoolean(vars.GetValue("ReuseNames", "true")); hideStrings = XmlConvert.ToBoolean(vars.GetValue("HideStrings", "true")); xmlMapping = XmlConvert.ToBoolean(vars.GetValue("XmlMapping", "false")); keyFile = vars.GetValue("KeyFile", null); }
internal Settings( Variables vars ) { inPath = vars.GetValue( "InPath", "." ); outPath = vars.GetValue( "OutPath", "." ); logFilePath = vars.GetValue( "LogFile", "" ); markedOnly = XmlConvert.ToBoolean( vars.GetValue( "MarkedOnly", "false" ) ); renameProperties = XmlConvert.ToBoolean( vars.GetValue( "RenameProperties", "true" ) ); renameEvents = XmlConvert.ToBoolean( vars.GetValue( "RenameEvents", "true" ) ); reuseNames = XmlConvert.ToBoolean( vars.GetValue( "ReuseNames", "true" ) ); useUnicodeNames = XmlConvert.ToBoolean(vars.GetValue("UseUnicodeNames", "false")); hideStrings = XmlConvert.ToBoolean(vars.GetValue("HideStrings", "true")); xmlMapping = XmlConvert.ToBoolean( vars.GetValue( "XmlMapping", "false" ) ); renegerateDebugInfo = XmlConvert.ToBoolean(vars.GetValue("RegenerateDebugInfo", "false") ); }
public Settings(Variables vars) { inPath = vars.GetValue ("InPath", "."); outPath = vars.GetValue ("OutPath", "."); logFilePath = vars.GetValue ("LogFile", ""); markedOnly = XmlConvert.ToBoolean (vars.GetValue ("MarkedOnly", "false")); renameProperties = XmlConvert.ToBoolean (vars.GetValue ("RenameProperties", "true")); renameEvents = XmlConvert.ToBoolean (vars.GetValue ("RenameEvents", "true")); keepPublicApi = XmlConvert.ToBoolean (vars.GetValue ("KeepPublicApi", "false")); hidePrivateApi = XmlConvert.ToBoolean (vars.GetValue ("HidePrivateApi", "false")); reuseNames = XmlConvert.ToBoolean (vars.GetValue ("ReuseNames", "true")); useUnicodeNames = XmlConvert.ToBoolean (vars.GetValue ("UseUnicodeNames", "false")); useKoreanNames = XmlConvert.ToBoolean (vars.GetValue ("UseKoreanNames", "false")); hideStrings = XmlConvert.ToBoolean (vars.GetValue ("HideStrings", "true")); optimize = XmlConvert.ToBoolean (vars.GetValue ("OptimizeMethods", "true")); supressIldasm = XmlConvert.ToBoolean (vars.GetValue ("SupressIldasm", "true")); xmlMapping = XmlConvert.ToBoolean (vars.GetValue ("XmlMapping", "false")); renegerateDebugInfo = XmlConvert.ToBoolean (vars.GetValue ("RegenerateDebugInfo", "false")); keyFile = vars.GetValue ("KeyFile", null); }
public static string GetAttribute( XmlReader reader, string name, Variables vars ) { return vars.Replace( GetAttribute( reader, name ) ); }
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; }
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; }
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; } } else if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "Module") { // hit end of module element...stop reading break; } } } return(info); }
public static string GetAttribute(XmlReader reader, string name, Variables vars) { return(vars.Replace(GetAttribute(reader, name))); }