public DummyAssemblyGenerator(Il2CppExecutor il2CppExecutor) { executor = il2CppExecutor; metadata = il2CppExecutor.metadata; il2Cpp = il2CppExecutor.il2Cpp; //Il2CppDummyDll var il2CppDummyDll = Il2CppDummyDll.Create(); Assemblies.Add(il2CppDummyDll); var addressAttribute = il2CppDummyDll.MainModule.Types.First(x => x.Name == "AddressAttribute").Methods[0]; var fieldOffsetAttribute = il2CppDummyDll.MainModule.Types.First(x => x.Name == "FieldOffsetAttribute").Methods[0]; attributeAttribute = il2CppDummyDll.MainModule.Types.First(x => x.Name == "AttributeAttribute").Methods[0]; var metadataOffsetAttribute = il2CppDummyDll.MainModule.Types.First(x => x.Name == "MetadataOffsetAttribute").Methods[0]; var tokenAttribute = il2CppDummyDll.MainModule.Types.First(x => x.Name == "TokenAttribute").Methods[0]; stringType = il2CppDummyDll.MainModule.TypeSystem.String; var resolver = new MyAssemblyResolver(); var moduleParameters = new ModuleParameters { Kind = ModuleKind.Dll, AssemblyResolver = resolver }; resolver.Register(il2CppDummyDll); var fieldDefinitionDic = new Dictionary <int, FieldDefinition>(); var methodDefinitionDic = new Dictionary <int, MethodDefinition>(); var parameterDefinitionDic = new Dictionary <int, ParameterDefinition>(); var propertyDefinitionDic = new Dictionary <int, PropertyDefinition>(); var eventDefinitionDic = new Dictionary <int, EventDefinition>(); //创建程序集,同时创建所有类 foreach (var imageDef in metadata.imageDefs) { var imageName = metadata.GetStringFromIndex(imageDef.nameIndex); var assemblyName = new AssemblyNameDefinition(imageName.Replace(".dll", ""), new Version("3.7.1.6")); var assemblyDefinition = AssemblyDefinition.CreateAssembly(assemblyName, imageName, moduleParameters); resolver.Register(assemblyDefinition); Assemblies.Add(assemblyDefinition); var moduleDefinition = assemblyDefinition.MainModule; moduleDefinition.Types.Clear();//清除自动创建的<Module>类 var typeEnd = imageDef.typeStart + imageDef.typeCount; for (var index = imageDef.typeStart; index < typeEnd; ++index) { var typeDef = metadata.typeDefs[index]; var namespaceName = metadata.GetStringFromIndex(typeDef.namespaceIndex); var typeName = metadata.GetStringFromIndex(typeDef.nameIndex); var typeDefinition = new TypeDefinition(namespaceName, typeName, (TypeAttributes)typeDef.flags); typeDefinitionDic.Add(typeDef, typeDefinition); if (typeDef.declaringTypeIndex == -1) { moduleDefinition.Types.Add(typeDefinition); } } } for (var index = 0; index < metadata.typeDefs.Length; ++index) { var typeDef = metadata.typeDefs[index]; var typeDefinition = typeDefinitionDic[typeDef]; //nestedtype for (int i = 0; i < typeDef.nested_type_count; i++) { var nestedIndex = metadata.nestedTypeIndices[typeDef.nestedTypesStart + i]; var nestedTypeDef = metadata.typeDefs[nestedIndex]; var nestedTypeDefinition = typeDefinitionDic[nestedTypeDef]; typeDefinition.NestedTypes.Add(nestedTypeDefinition); } } //提前处理 for (var index = 0; index < metadata.typeDefs.Length; ++index) { var typeDef = metadata.typeDefs[index]; var typeDefinition = typeDefinitionDic[typeDef]; var customTokenAttribute = new CustomAttribute(typeDefinition.Module.ImportReference(tokenAttribute)); customTokenAttribute.Fields.Add(new CustomAttributeNamedArgument("Token", new CustomAttributeArgument(stringType, $"0x{typeDef.token:X}"))); typeDefinition.CustomAttributes.Add(customTokenAttribute); //genericParameter if (typeDef.genericContainerIndex >= 0) { var genericContainer = metadata.genericContainers[typeDef.genericContainerIndex]; for (int i = 0; i < genericContainer.type_argc; i++) { var genericParameterIndex = genericContainer.genericParameterStart + i; var param = metadata.genericParameters[genericParameterIndex]; var genericParameter = CreateGenericParameter(param, typeDefinition); typeDefinition.GenericParameters.Add(genericParameter); } } //parent if (typeDef.parentIndex >= 0) { var parentType = il2Cpp.types[typeDef.parentIndex]; var parentTypeRef = GetTypeReference(typeDefinition, parentType); typeDefinition.BaseType = parentTypeRef; } //interfaces for (int i = 0; i < typeDef.interfaces_count; i++) { var interfaceType = il2Cpp.types[metadata.interfaceIndices[typeDef.interfacesStart + i]]; var interfaceTypeRef = GetTypeReference(typeDefinition, interfaceType); typeDefinition.Interfaces.Add(new InterfaceImplementation(interfaceTypeRef)); } } //处理field, method, property等等 foreach (var imageDef in metadata.imageDefs) { var imageName = metadata.GetStringFromIndex(imageDef.nameIndex); var typeEnd = imageDef.typeStart + imageDef.typeCount; for (int index = imageDef.typeStart; index < typeEnd; index++) { var typeDef = metadata.typeDefs[index]; var typeDefinition = typeDefinitionDic[typeDef]; //field var fieldEnd = typeDef.fieldStart + typeDef.field_count; for (var i = typeDef.fieldStart; i < fieldEnd; ++i) { var fieldDef = metadata.fieldDefs[i]; var fieldType = il2Cpp.types[fieldDef.typeIndex]; var fieldName = metadata.GetStringFromIndex(fieldDef.nameIndex); var fieldTypeRef = GetTypeReference(typeDefinition, fieldType); var fieldDefinition = new FieldDefinition(fieldName, (FieldAttributes)fieldType.attrs, fieldTypeRef); typeDefinition.Fields.Add(fieldDefinition); fieldDefinitionDic.Add(i, fieldDefinition); var customTokenAttribute = new CustomAttribute(typeDefinition.Module.ImportReference(tokenAttribute)); customTokenAttribute.Fields.Add(new CustomAttributeNamedArgument("Token", new CustomAttributeArgument(stringType, $"0x{fieldDef.token:X}"))); fieldDefinition.CustomAttributes.Add(customTokenAttribute); //fieldDefault if (metadata.GetFieldDefaultValueFromIndex(i, out var fieldDefault) && fieldDefault.dataIndex != -1) { if (TryGetDefaultValue(fieldDefault.typeIndex, fieldDefault.dataIndex, out var value)) { fieldDefinition.Constant = value; } else { var customAttribute = new CustomAttribute(typeDefinition.Module.ImportReference(metadataOffsetAttribute)); var offset = new CustomAttributeNamedArgument("Offset", new CustomAttributeArgument(stringType, $"0x{value:X}")); customAttribute.Fields.Add(offset); fieldDefinition.CustomAttributes.Add(customAttribute); } } //fieldOffset if (!fieldDefinition.IsLiteral) { var fieldOffset = il2Cpp.GetFieldOffsetFromIndex(index, i - typeDef.fieldStart, i, typeDefinition.IsValueType, fieldDefinition.IsStatic); if (fieldOffset >= 0) { var customAttribute = new CustomAttribute(typeDefinition.Module.ImportReference(fieldOffsetAttribute)); var offset = new CustomAttributeNamedArgument("Offset", new CustomAttributeArgument(stringType, $"0x{fieldOffset:X}")); customAttribute.Fields.Add(offset); fieldDefinition.CustomAttributes.Add(customAttribute); } } } //method var methodEnd = typeDef.methodStart + typeDef.method_count; for (var i = typeDef.methodStart; i < methodEnd; ++i) { var methodDef = metadata.methodDefs[i]; var methodName = metadata.GetStringFromIndex(methodDef.nameIndex); var methodDefinition = new MethodDefinition(methodName, (MethodAttributes)methodDef.flags, typeDefinition.Module.ImportReference(typeof(void))); methodDefinition.ImplAttributes = (MethodImplAttributes)methodDef.iflags; typeDefinition.Methods.Add(methodDefinition); //genericParameter if (methodDef.genericContainerIndex >= 0) { var genericContainer = metadata.genericContainers[methodDef.genericContainerIndex]; for (int j = 0; j < genericContainer.type_argc; j++) { var genericParameterIndex = genericContainer.genericParameterStart + j; var param = metadata.genericParameters[genericParameterIndex]; var genericParameter = CreateGenericParameter(param, methodDefinition); methodDefinition.GenericParameters.Add(genericParameter); } } var methodReturnType = il2Cpp.types[methodDef.returnType]; var returnType = GetTypeReferenceWithByRef(methodDefinition, methodReturnType); methodDefinition.ReturnType = returnType; var customTokenAttribute = new CustomAttribute(typeDefinition.Module.ImportReference(tokenAttribute)); customTokenAttribute.Fields.Add(new CustomAttributeNamedArgument("Token", new CustomAttributeArgument(stringType, $"0x{methodDef.token:X}"))); methodDefinition.CustomAttributes.Add(customTokenAttribute); if (methodDefinition.HasBody && typeDefinition.BaseType?.FullName != "System.MulticastDelegate") { var ilprocessor = methodDefinition.Body.GetILProcessor(); if (returnType.FullName == "System.Void") { ilprocessor.Append(ilprocessor.Create(OpCodes.Ret)); } else if (returnType.IsValueType) { var variable = new VariableDefinition(returnType); methodDefinition.Body.Variables.Add(variable); ilprocessor.Append(ilprocessor.Create(OpCodes.Ldloca_S, variable)); ilprocessor.Append(ilprocessor.Create(OpCodes.Initobj, returnType)); ilprocessor.Append(ilprocessor.Create(OpCodes.Ldloc_0)); ilprocessor.Append(ilprocessor.Create(OpCodes.Ret)); } else { ilprocessor.Append(ilprocessor.Create(OpCodes.Ldnull)); ilprocessor.Append(ilprocessor.Create(OpCodes.Ret)); } } methodDefinitionDic.Add(i, methodDefinition); //method parameter for (var j = 0; j < methodDef.parameterCount; ++j) { var parameterDef = metadata.parameterDefs[methodDef.parameterStart + j]; var parameterName = metadata.GetStringFromIndex(parameterDef.nameIndex); var parameterType = il2Cpp.types[parameterDef.typeIndex]; var parameterTypeRef = GetTypeReferenceWithByRef(methodDefinition, parameterType); var parameterDefinition = new ParameterDefinition(parameterName, (ParameterAttributes)parameterType.attrs, parameterTypeRef); methodDefinition.Parameters.Add(parameterDefinition); parameterDefinitionDic.Add(methodDef.parameterStart + j, parameterDefinition); //ParameterDefault if (metadata.GetParameterDefaultValueFromIndex(methodDef.parameterStart + j, out var parameterDefault) && parameterDefault.dataIndex != -1) { if (TryGetDefaultValue(parameterDefault.typeIndex, parameterDefault.dataIndex, out var value)) { parameterDefinition.Constant = value; } else { var customAttribute = new CustomAttribute(typeDefinition.Module.ImportReference(metadataOffsetAttribute)); var offset = new CustomAttributeNamedArgument("Offset", new CustomAttributeArgument(stringType, $"0x{value:X}")); customAttribute.Fields.Add(offset); parameterDefinition.CustomAttributes.Add(customAttribute); } } } //methodAddress var methodPointer = il2Cpp.GetMethodPointer(imageName, methodDef); if (methodPointer > 0) { var customAttribute = new CustomAttribute(typeDefinition.Module.ImportReference(addressAttribute)); var fixedMethodPointer = il2Cpp.GetRVA(methodPointer); var rva = new CustomAttributeNamedArgument("RVA", new CustomAttributeArgument(stringType, $"0x{fixedMethodPointer:X}")); var offset = new CustomAttributeNamedArgument("Offset", new CustomAttributeArgument(stringType, $"0x{il2Cpp.MapVATR(methodPointer):X}")); var va = new CustomAttributeNamedArgument("VA", new CustomAttributeArgument(stringType, $"0x{methodPointer:X}")); customAttribute.Fields.Add(rva); customAttribute.Fields.Add(offset); customAttribute.Fields.Add(va); if (methodDef.slot != ushort.MaxValue) { var slot = new CustomAttributeNamedArgument("Slot", new CustomAttributeArgument(stringType, methodDef.slot.ToString())); customAttribute.Fields.Add(slot); } methodDefinition.CustomAttributes.Add(customAttribute); } } //property var propertyEnd = typeDef.propertyStart + typeDef.property_count; for (var i = typeDef.propertyStart; i < propertyEnd; ++i) { var propertyDef = metadata.propertyDefs[i]; var propertyName = metadata.GetStringFromIndex(propertyDef.nameIndex); TypeReference propertyType = null; MethodDefinition GetMethod = null; MethodDefinition SetMethod = null; if (propertyDef.get >= 0) { GetMethod = methodDefinitionDic[typeDef.methodStart + propertyDef.get]; propertyType = GetMethod.ReturnType; } if (propertyDef.set >= 0) { SetMethod = methodDefinitionDic[typeDef.methodStart + propertyDef.set]; if (propertyType == null) { propertyType = SetMethod.Parameters[0].ParameterType; } } var propertyDefinition = new PropertyDefinition(propertyName, (PropertyAttributes)propertyDef.attrs, propertyType) { GetMethod = GetMethod, SetMethod = SetMethod }; typeDefinition.Properties.Add(propertyDefinition); propertyDefinitionDic.Add(i, propertyDefinition); var customTokenAttribute = new CustomAttribute(typeDefinition.Module.ImportReference(tokenAttribute)); customTokenAttribute.Fields.Add(new CustomAttributeNamedArgument("Token", new CustomAttributeArgument(stringType, $"0x{propertyDef.token:X}"))); propertyDefinition.CustomAttributes.Add(customTokenAttribute); } //event var eventEnd = typeDef.eventStart + typeDef.event_count; for (var i = typeDef.eventStart; i < eventEnd; ++i) { var eventDef = metadata.eventDefs[i]; var eventName = metadata.GetStringFromIndex(eventDef.nameIndex); var eventType = il2Cpp.types[eventDef.typeIndex]; var eventTypeRef = GetTypeReference(typeDefinition, eventType); var eventDefinition = new EventDefinition(eventName, (EventAttributes)eventType.attrs, eventTypeRef); if (eventDef.add >= 0) { eventDefinition.AddMethod = methodDefinitionDic[typeDef.methodStart + eventDef.add]; } if (eventDef.remove >= 0) { eventDefinition.RemoveMethod = methodDefinitionDic[typeDef.methodStart + eventDef.remove]; } if (eventDef.raise >= 0) { eventDefinition.InvokeMethod = methodDefinitionDic[typeDef.methodStart + eventDef.raise]; } typeDefinition.Events.Add(eventDefinition); eventDefinitionDic.Add(i, eventDefinition); var customTokenAttribute = new CustomAttribute(typeDefinition.Module.ImportReference(tokenAttribute)); customTokenAttribute.Fields.Add(new CustomAttributeNamedArgument("Token", new CustomAttributeArgument(stringType, $"0x{eventDef.token:X}"))); eventDefinition.CustomAttributes.Add(customTokenAttribute); } } } //第三遍,添加CustomAttribute if (il2Cpp.Version > 20) { PrepareCustomAttribute(); foreach (var imageDef in metadata.imageDefs) { var typeEnd = imageDef.typeStart + imageDef.typeCount; for (int index = imageDef.typeStart; index < typeEnd; index++) { var typeDef = metadata.typeDefs[index]; var typeDefinition = typeDefinitionDic[typeDef]; //typeAttribute CreateCustomAttribute(imageDef, typeDef.customAttributeIndex, typeDef.token, typeDefinition.Module, typeDefinition.CustomAttributes); //field var fieldEnd = typeDef.fieldStart + typeDef.field_count; for (var i = typeDef.fieldStart; i < fieldEnd; ++i) { var fieldDef = metadata.fieldDefs[i]; var fieldDefinition = fieldDefinitionDic[i]; //fieldAttribute CreateCustomAttribute(imageDef, fieldDef.customAttributeIndex, fieldDef.token, typeDefinition.Module, fieldDefinition.CustomAttributes); } //method var methodEnd = typeDef.methodStart + typeDef.method_count; for (var i = typeDef.methodStart; i < methodEnd; ++i) { var methodDef = metadata.methodDefs[i]; var methodDefinition = methodDefinitionDic[i]; //methodAttribute CreateCustomAttribute(imageDef, methodDef.customAttributeIndex, methodDef.token, typeDefinition.Module, methodDefinition.CustomAttributes); //method parameter for (var j = 0; j < methodDef.parameterCount; ++j) { var parameterDef = metadata.parameterDefs[methodDef.parameterStart + j]; var parameterDefinition = parameterDefinitionDic[methodDef.parameterStart + j]; //parameterAttribute CreateCustomAttribute(imageDef, parameterDef.customAttributeIndex, parameterDef.token, typeDefinition.Module, parameterDefinition.CustomAttributes); } } //property var propertyEnd = typeDef.propertyStart + typeDef.property_count; for (var i = typeDef.propertyStart; i < propertyEnd; ++i) { var propertyDef = metadata.propertyDefs[i]; var propertyDefinition = propertyDefinitionDic[i]; //propertyAttribute CreateCustomAttribute(imageDef, propertyDef.customAttributeIndex, propertyDef.token, typeDefinition.Module, propertyDefinition.CustomAttributes); } //event var eventEnd = typeDef.eventStart + typeDef.event_count; for (var i = typeDef.eventStart; i < eventEnd; ++i) { var eventDef = metadata.eventDefs[i]; var eventDefinition = eventDefinitionDic[i]; //eventAttribute CreateCustomAttribute(imageDef, eventDef.customAttributeIndex, eventDef.token, typeDefinition.Module, eventDefinition.CustomAttributes); } } } } }
public static MvcHtmlString NgCheckBoxFor <TModel, TProperty>(this HtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TProperty> > expression, string trueValue, string falseValue, object htmlAttributes) { MemberInfo member = ((MemberExpression)expression.Body).Member; var tagBuilder = GetCheckBox(member, trueValue, falseValue); bool inline = false; RouteValueDictionary htmlAttr = null; if (htmlAttributes != null) { htmlAttr = new RouteValueDictionary(htmlAttributes); if (htmlAttr.ContainsKey("class")) { if (htmlAttr["class"].ToString().Contains("inline")) { inline = true; } htmlAttr.Remove("class"); } foreach (string key in htmlAttr.Keys) { if (key.StartsWith("ng")) { tagBuilder.MergeAttribute("ng-" + key.Substring(2), htmlAttr[key].ToString()); } else { tagBuilder.MergeAttribute(key, htmlAttr[key].ToString()); } } } string displayText = member.Name; foreach (CustomAttributeData cs in member.CustomAttributes) { if (cs.AttributeType == typeof(DisplayAttribute)) { CustomAttributeNamedArgument nameArg = cs.NamedArguments.Where(m => m.MemberName == "Name").First(); if (nameArg == null || string.IsNullOrEmpty(nameArg.TypedValue.Value.ToString())) { displayText = member.Name; } else { displayText = nameArg.TypedValue.Value.ToString(); } } } string finalHtml = string.Empty; if (inline) { finalHtml = "<label class=\"checkbox-inline\">" + tagBuilder.ToString(TagRenderMode.SelfClosing) + " " + displayText + "</label>"; } else { TagBuilder divTag = new TagBuilder("div"); divTag.AddCssClass("checkbox"); divTag.InnerHtml = "<label>" + tagBuilder.ToString(TagRenderMode.SelfClosing) + " " + displayText + "</label>"; finalHtml = divTag.ToString(TagRenderMode.Normal);; } return(MvcHtmlString.Create(finalHtml)); }
private CustomAttributeNamedArgument Fix(CustomAttributeNamedArgument namedArg) { CustomAttributeNamedArgument ret = new CustomAttributeNamedArgument(namedArg.Name, Fix(namedArg.Argument)); return(ret); }
static void AssertCustomAttributeArgument(string expected, CustomAttributeNamedArgument named_argument) { AssertCustomAttributeArgument(expected, named_argument.Argument); }
public static string GetMemberName(this CustomAttributeNamedArgument source) { return(source.MemberInfo.Name); }
public static int CompareToSecurityAttribute(this SecurityAttribute first, SecurityAttribute second, SecurityDeclaration firstDeclaration, SecurityDeclaration secondDeclaration) { if (first == second) { return(0); } string firstActionAsString = firstDeclaration.Action.ToString(); string secondActionAsString = secondDeclaration.Action.ToString(); if (firstActionAsString != secondActionAsString) { return(firstActionAsString.CompareTo(secondActionAsString)); } #region Compare Properties int maxProperties = Math.Max(first.Properties.Count, second.Properties.Count); for (int i = 0; i < maxProperties; i++) { if (i >= first.Properties.Count) { return(1); } if (i >= second.Properties.Count) { return(-1); } CustomAttributeNamedArgument firstProperty = first.Properties[i]; CustomAttributeNamedArgument secondProperty = second.Properties[i]; if (firstProperty.Name == secondProperty.Name) { string firstValue = firstProperty.Argument.Value.ToString(); string secondValue = secondProperty.Argument.Value.ToString(); if (firstValue != secondValue) { return(firstValue.CompareTo(secondValue)); } } else { return(firstProperty.Name.CompareTo(secondProperty.Name)); } } #endregion #region Compare Fiels int maxFields = Math.Max(first.Fields.Count, second.Fields.Count); for (int i = 0; i < maxFields; i++) { if (i >= first.Fields.Count) { return(1); } if (i >= second.Fields.Count) { return(-1); } CustomAttributeNamedArgument firstField = first.Fields[i]; CustomAttributeNamedArgument secondField = second.Fields[i]; if (firstField.Name == secondField.Name) { string firstValue = firstField.Argument.Value.ToString(); string secondValue = secondField.Argument.Value.ToString(); if (firstValue != secondValue) { return(firstValue.CompareTo(secondValue)); } } else { return(firstField.Name.CompareTo(secondField.Name)); } } #endregion return(0); }
public static MvcHtmlString NgDateBoxFor <TModel, TProperty>(this HtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TProperty> > expression, object htmlAttributes, string icon, string onClick, string format, string strIsOpen, string dateOptions) { MemberInfo member = ((MemberExpression)expression.Body).Member; var tagBuilder = new TagBuilder("input"); List <TagBuilder> validationSpans = new List <TagBuilder>(); foreach (CustomAttributeData cs in member.CustomAttributes) { if (cs.AttributeType == typeof(DataTypeAttribute)) { string inputType = HelperConstants.DataTypeMapping[(DataType)cs.ConstructorArguments[0].Value]; tagBuilder.MergeAttribute("type", inputType); tagBuilder.MergeAttribute("name", member.Name.ToLower()); CustomAttributeNamedArgument nameArg = cs.NamedArguments.Where(m => m.MemberName == "ErrorMessage").First(); if (nameArg != null) { validationSpans.Add(NgHtmlHelper.GetSpan(nameArg.TypedValue.Value.ToString(), member.Name.ToLower(), "date")); } } else if (cs.AttributeType == typeof(RequiredAttribute)) { tagBuilder.MergeAttribute("ng-required", "true"); validationSpans.Add(NgHtmlHelper.GetRequiredSpan(cs, member)); } } if (member.CustomAttributes.Where(attr => attr.AttributeType == typeof(DataTypeAttribute)).Count() == 0) { tagBuilder.MergeAttribute("type", "text"); tagBuilder.MergeAttribute("name", member.Name.ToLower()); } tagBuilder.MergeAttribute("readonly", "readonly"); RouteValueDictionary htmlAttr = new RouteValueDictionary(htmlAttributes); NgHtmlHelper.SetHtmlAttributes(tagBuilder, htmlAttributes); tagBuilder.MergeAttribute("ng-model", member.ReflectedType.Name.ToCamelCase() + "." + member.Name); if (string.IsNullOrEmpty(format)) { format = "MM/dd/yyyy"; } tagBuilder.MergeAttribute("uib-datepicker-popup", format); tagBuilder.MergeAttribute("is-open", strIsOpen); tagBuilder.MergeAttribute("close-text", "Close"); if (!string.IsNullOrEmpty(dateOptions)) { tagBuilder.MergeAttribute("datepicker-options", dateOptions); } string finalHtml = string.Empty; if (!string.IsNullOrEmpty(icon)) { var tagDiv = new TagBuilder("div"); tagDiv.AddCssClass("input-group"); tagDiv.MergeAttribute("id", member.Name.ToLower()); var tagIconDiv = new TagBuilder("span"); tagIconDiv.AddCssClass("input-group-btn"); StringBuilder strBtnSpan = new StringBuilder(); strBtnSpan.AppendFormat("<button type =\"button\" class=\"btn btn-default\" ng-click=\"{0}()\" ><i class=\"{1}\"></i></button>", onClick, icon); tagIconDiv.InnerHtml = strBtnSpan.ToString(); tagDiv.InnerHtml = tagBuilder.ToString(TagRenderMode.SelfClosing) + tagIconDiv.ToString(TagRenderMode.Normal); finalHtml = tagDiv.ToString(TagRenderMode.Normal); } else { tagBuilder.MergeAttribute("id", member.Name.ToLower()); finalHtml = tagBuilder.ToString(TagRenderMode.SelfClosing); } // tagBuilder foreach (TagBuilder span in validationSpans) { finalHtml += span.ToString(TagRenderMode.Normal); } return(MvcHtmlString.Create(finalHtml)); }
public CustomAttributeNamedArgument Copy(CustomAttributeNamedArgument namedArg, IGenericParameterProvider context) { return(new CustomAttributeNamedArgument(namedArg.Name, Copy(namedArg.Argument, context))); }
private void CreateCustomAttribute(Il2CppImageDefinition imageDef, int customAttributeIndex, uint token, ModuleDefinition moduleDefinition, Collection <CustomAttribute> customAttributes) { var attributeIndex = metadata.GetCustomAttributeIndex(imageDef, customAttributeIndex, token); if (attributeIndex >= 0) { try { if (il2Cpp.Version < 29) { var attributeTypeRange = metadata.attributeTypeRanges[attributeIndex]; for (int i = 0; i < attributeTypeRange.count; i++) { var attributeTypeIndex = metadata.attributeTypes[attributeTypeRange.start + i]; var attributeType = il2Cpp.types[attributeTypeIndex]; var typeDef = executor.GetTypeDefinitionFromIl2CppType(attributeType); var typeDefinition = typeDefinitionDic[typeDef]; if (!TryRestoreCustomAttribute(typeDefinition, moduleDefinition, customAttributes)) { var methodPointer = executor.customAttributeGenerators[attributeIndex]; var fixedMethodPointer = il2Cpp.GetRVA(methodPointer); var customAttribute = new CustomAttribute(moduleDefinition.ImportReference(attributeAttribute)); var name = new CustomAttributeNamedArgument("Name", new CustomAttributeArgument(stringType, typeDefinition.Name)); var rva = new CustomAttributeNamedArgument("RVA", new CustomAttributeArgument(stringType, $"0x{fixedMethodPointer:X}")); var offset = new CustomAttributeNamedArgument("Offset", new CustomAttributeArgument(stringType, $"0x{il2Cpp.MapVATR(methodPointer):X}")); customAttribute.Fields.Add(name); customAttribute.Fields.Add(rva); customAttribute.Fields.Add(offset); customAttributes.Add(customAttribute); } } } else { var startRange = metadata.attributeDataRanges[attributeIndex]; var endRange = metadata.attributeDataRanges[attributeIndex + 1]; metadata.Position = metadata.header.attributeDataOffset + startRange.startOffset; var buff = metadata.ReadBytes((int)(endRange.startOffset - startRange.startOffset)); var reader = new CustomAttributeDataReader(executor, buff); if (reader.Count != 0) { for (var i = 0; i < reader.Count; i++) { var visitor = reader.VisitCustomAttributeData(); var methodDefinition = methodDefinitionDic[visitor.CtorIndex]; var customAttribute = new CustomAttribute(moduleDefinition.ImportReference(methodDefinition)); foreach (var argument in visitor.Arguments) { var parameterDefinition = methodDefinition.Parameters[argument.Index]; var customAttributeArgument = CreateCustomAttributeArgument(parameterDefinition.ParameterType, argument.Value, methodDefinition); customAttribute.ConstructorArguments.Add(customAttributeArgument); } foreach (var field in visitor.Fields) { var fieldDefinition = fieldDefinitionDic[field.Index]; var customAttributeArgument = CreateCustomAttributeArgument(fieldDefinition.FieldType, field.Value, fieldDefinition); var customAttributeNamedArgument = new CustomAttributeNamedArgument(fieldDefinition.Name, customAttributeArgument); customAttribute.Fields.Add(customAttributeNamedArgument); } foreach (var property in visitor.Properties) { var propertyDefinition = propertyDefinitionDic[property.Index]; var customAttributeArgument = CreateCustomAttributeArgument(propertyDefinition.PropertyType, property.Value, propertyDefinition); var customAttributeNamedArgument = new CustomAttributeNamedArgument(propertyDefinition.Name, customAttributeArgument); customAttribute.Properties.Add(customAttributeNamedArgument); } customAttributes.Add(customAttribute); } } } } catch { Console.WriteLine($"ERROR: Error while restoring attributeIndex {attributeIndex}"); } } }
private void FixPlatformVersion(CustomAttributeNamedArgument cana) { FixPlatformVersion(cana.Argument); }
private CustomAttributeNamedArgument Fix(CustomAttributeNamedArgument namedArg, IGenericParameterProvider context) { CustomAttributeNamedArgument ret = new CustomAttributeNamedArgument(namedArg.Name, Fix(namedArg.Argument, context)); return(ret); }
public static string MemberName(this CustomAttributeNamedArgument argument) => argument.MemberName;
internal NamedAttributeValueWithMonoCecil(AssemblyWithMonoCecil assembly, CustomAttributeNamedArgument attributeValue) { this.attributeValue = attributeValue; value = ConstantExpressionFactory.CreateExpression(assembly, attributeValue.Argument.Value); }
private CustomAttributeNamedArgument FixPlatformVersion(CustomAttributeNamedArgument cana) { return(new CustomAttributeNamedArgument(cana.Name, FixPlatformVersion(cana.Argument))); }
protected virtual void AppendAttributeArgument(StringBuilder sb, CustomAttributeNamedArgument argument) { sb.Append(argument.MemberName); sb.Append(" = "); AppendAttributeArgument(sb, argument.TypedValue); }
public static bool IsField(this CustomAttributeNamedArgument arg) { return(arg.IsField); }
internal NamedAttributeValueWithReflection(CustomAttributeNamedArgument attributeValue) { this.attributeValue = attributeValue; value = ConstantExpressionFactory.CreateExpression(attributeValue.TypedValue.Value); }
public DummyAssemblyCreator(Metadata metadata, Il2Cpp il2cpp) { this.metadata = metadata; this.il2cpp = il2cpp; //Il2CppDummyDll var il2CppDummyDll = AssemblyDefinition.ReadAssembly(new MemoryStream(Resource1.Il2CppDummyDll)); var addressAttribute = il2CppDummyDll.MainModule.Types.First(x => x.Name == "AddressAttribute").Methods.First(); var fieldOffsetAttribute = il2CppDummyDll.MainModule.Types.First(x => x.Name == "FieldOffsetAttribute").Methods.First(); var stringType = il2CppDummyDll.MainModule.TypeSystem.String; var resolver = new MyAssemblyResolver(); var moduleParameters = new ModuleParameters { Kind = ModuleKind.Dll, AssemblyResolver = resolver }; //创建程序集,同时创建所有类 foreach (var imageDef in metadata.imageDefs) { var assemblyName = new AssemblyNameDefinition(metadata.GetStringFromIndex(imageDef.nameIndex).Replace(".dll", ""), new Version("3.7.1.6")); var assemblyDefinition = AssemblyDefinition.CreateAssembly(assemblyName, metadata.GetStringFromIndex(imageDef.nameIndex), moduleParameters); resolver.Register(assemblyDefinition); Assemblies.Add(assemblyDefinition); var moduleDefinition = assemblyDefinition.MainModule; moduleDefinition.Types.Clear();//清除自动创建的<Module>类 var typeEnd = imageDef.typeStart + imageDef.typeCount; for (var index = imageDef.typeStart; index < typeEnd; ++index) { var typeDef = metadata.typeDefs[index]; var namespaceName = metadata.GetStringFromIndex(typeDef.namespaceIndex); var typeName = metadata.GetStringFromIndex(typeDef.nameIndex); TypeDefinition typeDefinition; if (typeDef.declaringTypeIndex != -1)//nested types { typeDefinition = typeDefinitionDic[index]; } else { typeDefinition = new TypeDefinition(namespaceName, typeName, (TypeAttributes)typeDef.flags); moduleDefinition.Types.Add(typeDefinition); typeDefinitionDic.Add(index, typeDefinition); } //nestedtype for (int i = 0; i < typeDef.nested_type_count; i++) { var nestedIndex = metadata.nestedTypeIndices[typeDef.nestedTypesStart + i]; var nestedTypeDef = metadata.typeDefs[nestedIndex]; var nestedTypeDefinition = new TypeDefinition(metadata.GetStringFromIndex(nestedTypeDef.namespaceIndex), metadata.GetStringFromIndex(nestedTypeDef.nameIndex), (TypeAttributes)nestedTypeDef.flags); typeDefinition.NestedTypes.Add(nestedTypeDefinition); typeDefinitionDic.Add(nestedIndex, nestedTypeDefinition); } } } //先单独处理,因为不知道会不会有问题 for (var index = 0; index < metadata.uiNumTypes; ++index) { var typeDef = metadata.typeDefs[index]; var typeDefinition = typeDefinitionDic[index]; //parent if (typeDef.parentIndex >= 0) { var parentType = il2cpp.types[typeDef.parentIndex]; var parentTypeRef = GetTypeReference(typeDefinition, parentType); typeDefinition.BaseType = parentTypeRef; } //interfaces for (int i = 0; i < typeDef.interfaces_count; i++) { var interfaceType = il2cpp.types[metadata.interfaceIndices[typeDef.interfacesStart + i]]; var interfaceTypeRef = GetTypeReference(typeDefinition, interfaceType); typeDefinition.Interfaces.Add(interfaceTypeRef); } } //处理field, method, property等等 for (var index = 0; index < metadata.uiNumTypes; ++index) { var typeDef = metadata.typeDefs[index]; var typeDefinition = typeDefinitionDic[index]; //field var fieldEnd = typeDef.fieldStart + typeDef.field_count; for (var i = typeDef.fieldStart; i < fieldEnd; ++i) { var fieldDef = metadata.fieldDefs[i]; var fieldType = il2cpp.types[fieldDef.typeIndex]; var fieldName = metadata.GetStringFromIndex(fieldDef.nameIndex); var fieldTypeRef = GetTypeReference(typeDefinition, fieldType); var fieldDefinition = new FieldDefinition(fieldName, (FieldAttributes)fieldType.attrs, fieldTypeRef); typeDefinition.Fields.Add(fieldDefinition); //fieldDefault if (fieldDefinition.HasDefault) { var fieldDefault = metadata.GetFieldDefaultValueFromIndex(i); if (fieldDefault != null && fieldDefault.dataIndex != -1) { fieldDefinition.Constant = GetDefaultValue(fieldDefault.dataIndex, fieldDefault.typeIndex); } } //fieldOffset var fieldOffset = il2cpp.GetFieldOffsetFromIndex(index, i - typeDef.fieldStart, i); if (fieldOffset > 0) { var customAttribute = new CustomAttribute(typeDefinition.Module.Import(fieldOffsetAttribute)); var offset = new CustomAttributeNamedArgument("Offset", new CustomAttributeArgument(stringType, $"0x{fieldOffset:X}")); customAttribute.Fields.Add(offset); fieldDefinition.CustomAttributes.Add(customAttribute); } } //method var methodEnd = typeDef.methodStart + typeDef.method_count; for (var i = typeDef.methodStart; i < methodEnd; ++i) { var methodDef = metadata.methodDefs[i]; var methodReturnType = il2cpp.types[methodDef.returnType]; var methodName = metadata.GetStringFromIndex(methodDef.nameIndex); var methodDefinition = new MethodDefinition(methodName, (MethodAttributes)methodDef.flags, typeDefinition.Module.Import(typeof(void))); typeDefinition.Methods.Add(methodDefinition); methodDefinition.ReturnType = GetTypeReference(methodDefinition, methodReturnType); if (methodDefinition.HasBody && typeDefinition.BaseType?.FullName != "System.MulticastDelegate") { var ilprocessor = methodDefinition.Body.GetILProcessor(); ilprocessor.Append(ilprocessor.Create(OpCodes.Nop)); } methodDefinitionDic.Add(i, methodDefinition); //method parameter for (var j = 0; j < methodDef.parameterCount; ++j) { var parameterDef = metadata.parameterDefs[methodDef.parameterStart + j]; var parameterName = metadata.GetStringFromIndex(parameterDef.nameIndex); var parameterType = il2cpp.types[parameterDef.typeIndex]; var parameterTypeRef = GetTypeReference(methodDefinition, parameterType); var parameterDefinition = new ParameterDefinition(parameterName, (ParameterAttributes)parameterType.attrs, parameterTypeRef); methodDefinition.Parameters.Add(parameterDefinition); //ParameterDefault if (parameterDefinition.HasDefault) { var parameterDefault = metadata.GetParameterDefaultValueFromIndex(methodDef.parameterStart + j); if (parameterDefault != null && parameterDefault.dataIndex != -1) { parameterDefinition.Constant = GetDefaultValue(parameterDefault.dataIndex, parameterDefault.typeIndex); } } } //补充泛型参数 if (methodDef.genericContainerIndex >= 0) { var genericContainer = metadata.genericContainers[methodDef.genericContainerIndex]; if (genericContainer.type_argc > methodDefinition.GenericParameters.Count) { for (int j = methodDefinition.GenericParameters.Count + 1; j <= genericContainer.type_argc; j++) { var genericParameter = new GenericParameter("T" + j, methodDefinition); methodDefinition.GenericParameters.Add(genericParameter); } } } //address ulong methodPointer; if (methodDef.methodIndex >= 0) { methodPointer = il2cpp.methodPointers[methodDef.methodIndex]; } else { il2cpp.genericMethoddDictionary.TryGetValue(i, out methodPointer); } if (methodPointer > 0) { var customAttribute = new CustomAttribute(typeDefinition.Module.Import(addressAttribute)); var rva = new CustomAttributeNamedArgument("RVA", new CustomAttributeArgument(stringType, $"0x{methodPointer:X}")); var offset = new CustomAttributeNamedArgument("Offset", new CustomAttributeArgument(stringType, $"0x{il2cpp.MapVATR(methodPointer):X}")); customAttribute.Fields.Add(rva); customAttribute.Fields.Add(offset); methodDefinition.CustomAttributes.Add(customAttribute); } } //property var propertyEnd = typeDef.propertyStart + typeDef.property_count; for (var i = typeDef.propertyStart; i < propertyEnd; ++i) { var propertyDef = metadata.propertyDefs[i]; var propertyName = metadata.GetStringFromIndex(propertyDef.nameIndex); TypeReference propertyType = null; MethodDefinition GetMethod = null; MethodDefinition SetMethod = null; if (propertyDef.get >= 0) { GetMethod = methodDefinitionDic[typeDef.methodStart + propertyDef.get]; propertyType = GetMethod.ReturnType; } if (propertyDef.set >= 0) { SetMethod = methodDefinitionDic[typeDef.methodStart + propertyDef.set]; if (propertyType == null) { propertyType = SetMethod.Parameters[0].ParameterType; } } var propertyDefinition = new PropertyDefinition(propertyName, (PropertyAttributes)propertyDef.attrs, propertyType) { GetMethod = GetMethod, SetMethod = SetMethod }; typeDefinition.Properties.Add(propertyDefinition); } //event var eventEnd = typeDef.eventStart + typeDef.event_count; for (var i = typeDef.eventStart; i < eventEnd; ++i) { var eventDef = metadata.eventDefs[i]; var eventName = metadata.GetStringFromIndex(eventDef.nameIndex); var eventType = il2cpp.types[eventDef.typeIndex]; var eventTypeRef = GetTypeReference(typeDefinition, eventType); var eventDefinition = new EventDefinition(eventName, (EventAttributes)eventType.attrs, eventTypeRef); if (eventDef.add >= 0) { eventDefinition.AddMethod = methodDefinitionDic[typeDef.methodStart + eventDef.add]; } if (eventDef.remove >= 0) { eventDefinition.RemoveMethod = methodDefinitionDic[typeDef.methodStart + eventDef.remove]; } if (eventDef.raise >= 0) { eventDefinition.InvokeMethod = methodDefinitionDic[typeDef.methodStart + eventDef.raise]; } typeDefinition.Events.Add(eventDefinition); } //补充泛型参数 if (typeDef.genericContainerIndex >= 0) { var genericContainer = metadata.genericContainers[typeDef.genericContainerIndex]; if (genericContainer.type_argc > typeDefinition.GenericParameters.Count) { for (int j = typeDefinition.GenericParameters.Count + 1; j <= genericContainer.type_argc; j++) { var genericParameter = new GenericParameter("T" + j, typeDefinition); typeDefinition.GenericParameters.Add(genericParameter); } } } } //第三遍,添加CustomAttribute。只添加SerializeField用于MonoBehaviour的反序列化 if (il2cpp.version > 20) { var engine = Assemblies.Find(x => x.MainModule.Types.Any(t => t.Namespace == "UnityEngine" && t.Name == "SerializeField")); var serializeField = engine.MainModule.Types.First(x => x.Name == "SerializeField").Methods.First(); foreach (var imageDef in metadata.imageDefs) { var typeEnd = imageDef.typeStart + imageDef.typeCount; for (int index = imageDef.typeStart; index < typeEnd; index++) { var typeDef = metadata.typeDefs[index]; var typeDefinition = typeDefinitionDic[index]; //field var fieldEnd = typeDef.fieldStart + typeDef.field_count; for (var i = typeDef.fieldStart; i < fieldEnd; ++i) { var fieldDef = metadata.fieldDefs[i]; var fieldName = metadata.GetStringFromIndex(fieldDef.nameIndex); var fieldDefinition = typeDefinition.Fields.First(x => x.Name == fieldName); //fieldAttribute var attributeIndex = metadata.GetCustomAttributeIndex(imageDef, fieldDef.customAttributeIndex, fieldDef.token); if (attributeIndex >= 0) { var attributeTypeRange = metadata.attributeTypeRanges[attributeIndex]; for (int j = 0; j < attributeTypeRange.count; j++) { var attributeTypeIndex = metadata.attributeTypes[attributeTypeRange.start + j]; var attributeType = il2cpp.types[attributeTypeIndex]; if (attributeType.type == Il2CppTypeEnum.IL2CPP_TYPE_CLASS) { var klass = metadata.typeDefs[attributeType.data.klassIndex]; var attributeName = metadata.GetStringFromIndex(klass.nameIndex); if (attributeName == "SerializeField") { var customAttribute = new CustomAttribute(typeDefinition.Module.Import(serializeField)); fieldDefinition.CustomAttributes.Add(customAttribute); } } } } } } } } }
public static SecurityDeclaration Xml2PermissionSet(SecurityDeclaration xmlDeclaration, ModuleDefinition targetModule) { if (!xmlDeclaration.HasSecurityAttributes || xmlDeclaration.SecurityAttributes.Count == 0) { // nothing to convert return(null); } if (xmlDeclaration.SecurityAttributes.Count > 1) { throw new Exception("Cannot convert SecurityDeclaration with more than one attribute"); } SecurityAttribute sa = xmlDeclaration.SecurityAttributes[0]; if (sa.HasFields) { throw new NotSupportedException("Cannot convert SecurityDeclaration with fields"); } if (!sa.HasProperties || sa.Properties.Count > 1) { throw new NotSupportedException("Invalid XML SecurityDeclaration (only 1 property supported)"); } CustomAttributeNamedArgument arg = sa.Properties[0]; if (arg.Name != "XML" || arg.Argument.Type.FullName != "System.String") { throw new ArgumentException("Property \"XML\" expected"); } if (string.IsNullOrEmpty(arg.Argument.Value as string)) { return(null); } XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml((string)arg.Argument.Value); XmlNode permissionSet = xmlDoc.SelectSingleNode("/PermissionSet"); if (permissionSet == null) { return(null); } XmlNode permissionSetClass = permissionSet.SelectSingleNode("@class"); // check version? if (permissionSetClass == null) { return(null); } if (permissionSetClass.Value != "System.Security.PermissionSet") { return(null); } XmlNode iPermission = permissionSet.SelectSingleNode("IPermission"); if (iPermission == null) { return(null); } XmlNode iPermissionClass = iPermission.SelectSingleNode("@class"); // check version? if (iPermissionClass == null) { return(null); } // Create Namespace & Name from FullName, AssemblyName can be ignored since we look it up. string[] valueParts = iPermissionClass.Value.Split(','); Collection <string> classNamespace = new Collection <string>(valueParts[0].Split('.')); string assemblyName = valueParts[1].Trim(); string className = classNamespace[classNamespace.Count - 1]; classNamespace.RemoveAt(classNamespace.Count - 1); SecurityAttribute attribute = new SecurityAttribute(GetTypeRef(string.Join(".", classNamespace.ToArray()), className, assemblyName, targetModule)); foreach (XmlAttribute xmlAttr in iPermission.Attributes) { if ((xmlAttr.Name != "class") && (xmlAttr.Name != "version")) { attribute.Properties.Add(new CustomAttributeNamedArgument(xmlAttr.Name, new CustomAttributeArgument(targetModule.TypeSystem.String, xmlAttr.Value))); } } SecurityDeclaration newSd = new SecurityDeclaration(xmlDeclaration.Action); newSd.SecurityAttributes.Add(attribute); return(newSd); }
public static CustomAttributeTypedArgument GetTypedValue(this CustomAttributeNamedArgument source) { return(source.TypedValue); }
private CustomAttributeNamedArgument FixupCustomAttributeNamedArgument(CustomAttributeNamedArgument source) { return(new CustomAttributeNamedArgument(source.Name, FixupCustomAttributeArgument(source.Argument))); }
private CommonNamedArgument GetCommonNamedArgument(CustomAttributeNamedArgument argument) { return(new CommonNamedArgument(argument.MemberInfo.Name, GetCommonType(argument.TypedValue.ArgumentType), GetArgumentValue(argument.TypedValue))); }
protected override void Visit(CustomAttributeNamedArgument customAttributeNamedArgument, Context context) { Touch(customAttributeNamedArgument); base.Visit(customAttributeNamedArgument, context); }
public abstract CustomAttributeNamedArgument ProjectNamedArgument(CustomAttributeNamedArgument value);
void AddAttributeValue(ICollection <string> items, CustomAttribute attr, string errorCode, string errorFmt, bool isDirectory, string fullPath) { if (!attr.HasConstructorArguments || attr.ConstructorArguments.Count != 1) { LogWarning("Attribute {0} doesn't have expected one constructor agrument", attr.AttributeType.FullName); return; } CustomAttributeArgument arg = attr.ConstructorArguments.First(); string path = arg.Value as string; if (string.IsNullOrEmpty(path)) { LogWarning("Attribute {0} contructor argument is empty or not set to string", attr.AttributeType.FullName); return; } path = SubstituteEnvVariables(path).TrimEnd(Path.DirectorySeparatorChar); string baseDir = null; CustomAttributeNamedArgument sourceUrl = attr.Properties.FirstOrDefault(p => p.Name == "SourceUrl"); CustomAttributeNamedArgument embeddedArchive = attr.Properties.FirstOrDefault(p => p.Name == "EmbeddedArchive"); CustomAttributeNamedArgument version = attr.Properties.FirstOrDefault(p => p.Name == "Version"); CustomAttributeNamedArgument sha1sum = attr.Properties.FirstOrDefault(p => p.Name == "Sha1sum"); var isXamarinAssembly = Path.GetFileName(fullPath).StartsWith(AssemblyNamePrefix, StringComparison.OrdinalIgnoreCase); var assemblyDir = Path.Combine(CachePath, Path.GetFileNameWithoutExtension(fullPath)); // upgrade the paths to not strip off the Xamarin. prefix as it might cause assembly // collisions now that we cache everything here. var oldAssemblyDir = Path.Combine(CachePath, Path.GetFileNameWithoutExtension(fullPath).Substring(isXamarinAssembly ? AssemblyNamePrefix.Length : 0)); if (string.Compare(assemblyDir, oldAssemblyDir, StringComparison.OrdinalIgnoreCase) != 0 && Directory.Exists(oldAssemblyDir)) { Directory.CreateDirectory(assemblyDir); foreach (var oldDir in Directory.GetDirectories(oldAssemblyDir, "*", SearchOption.AllDirectories)) { var newDir = oldDir.Replace(oldAssemblyDir, assemblyDir); Directory.CreateDirectory(newDir); } foreach (string oldFile in Directory.GetFiles(oldAssemblyDir, "*.*", SearchOption.AllDirectories)) { var newFile = oldFile.Replace(oldAssemblyDir, assemblyDir); Directory.CreateDirectory(Path.GetDirectoryName(newFile)); File.Copy(oldFile, newFile, true); } Directory.Delete(oldAssemblyDir, recursive: true); } if (sourceUrl.Name != null) { if (new Uri(sourceUrl.Argument.Value as string).IsFile) { assemblyDir = Path.GetDirectoryName(fullPath); } baseDir = MakeSureLibraryIsInPlace(assemblyDir, sourceUrl.Argument.Value as string, version.Argument.Value as string, embeddedArchive.Argument.Value as string, sha1sum.Argument.Value as string); } if (!string.IsNullOrEmpty(baseDir) && !Path.IsPathRooted(path)) { path = Path.Combine(baseDir, path); } if ((isDirectory && Directory.Exists(path)) || (!isDirectory && File.Exists(path))) { items.Add(Path.GetFullPath(path).TrimEnd(Path.DirectorySeparatorChar)); return; } LogCodedError(errorCode, errorFmt, ErrorMessage(attr), path); }
static void AssertArgument <T> (T value, CustomAttributeNamedArgument named_argument) { AssertArgument(value, named_argument.Argument); }
public static bool IsField(this CustomAttributeNamedArgument arg) { return(arg.MemberInfo is FieldInfo); }
/// <summary> /// Clones a cached CustomAttributeNamedArgument into a freshly allocated one suitable for direct return through an api. /// </summary> private static CustomAttributeNamedArgument CloneForApiReturn(this CustomAttributeNamedArgument can) { return(new CustomAttributeNamedArgument(can.MemberInfo, can.TypedValue.CloneForApiReturn())); }
public static string GetMemberName(this CustomAttributeNamedArgument arg) { return(arg.MemberName); }
public static MemberReference FindMemberArgumentRefersTo(IList fieldsAndProperties, CustomAttributeNamedArgument argument) { MemberReference result = null; foreach (object member in fieldsAndProperties) { if ((member as MemberReference).Name == argument.Name) { result = member as MemberReference; } } return(result); }
public static bool op_Inequality(CustomAttributeNamedArgument left, CustomAttributeNamedArgument right) {}