Ejemplo n.º 1
0
 public string FindAssemblyFile(string fullName)
 {
     return(FindAssemblyFile(AssemblyNameReference.Parse(fullName)));
 }
Ejemplo n.º 2
0
        protected override void OnExecute(object sender, EventArgs e)
        {
            var explorer = owner.DTE.ToolWindows.SolutionExplorer;
            var item     = ((object[])explorer.SelectedItems).FirstOrDefault() as UIHierarchyItem;

            if (item == null)
            {
                return;
            }
            if (item.Object is Reference reference)
            {
                var project       = reference.ContainingProject;
                var roslynProject = owner.Workspace.CurrentSolution.Projects.FirstOrDefault(p => p.FilePath == project.FileName);
                var references    = GetReferences(roslynProject);
                if (references.TryGetValue(reference.Name, out var path))
                {
                    OpenAssembliesInILSpy(new[] { path });
                }
                else
                {
                    owner.ShowMessage("Could not find reference '{0}', please ensure the project and all references were built correctly!", reference.Name);
                }
            }
            else
            {
                dynamic referenceObject = item.Object;
                var     values          = GetProperties(referenceObject.Properties, "Type", "FusionName", "ResolvedPath");
                if (values[0] == "Package")
                {
                    values = GetProperties(referenceObject.Properties, "Name", "Version", "Path");
                    if (values[0] != null && values[1] != null && values[2] != null)
                    {
                        OpenAssembliesInILSpy(new[] { $"{values[2]}\\{values[0]}.{values[1]}.nupkg" });
                        return;
                    }
                }
                else if (values[2] != null)
                {
                    OpenAssembliesInILSpy(new[] { $"{values[2]}" });
                    return;
                }
                else if (!string.IsNullOrWhiteSpace(values[1]))
                {
                    OpenAssembliesInILSpy(new string[] { GacInterop.FindAssemblyInNetGac(AssemblyNameReference.Parse(values[1])) });
                    return;
                }
                owner.ShowMessage("Could not find reference '{0}', please ensure the project and all references were built correctly!", referenceObject.Name);
            }
        }
        public void NestedTypeForwarder()
        {
            var resolver   = new CustomResolver();
            var parameters = new ReaderParameters {
                AssemblyResolver = resolver
            };

            var types = ModuleDefinition.ReadModule(
                CompilationService.CompileResource(GetCSharpResourcePath("CustomAttributes.cs", typeof(ResolveTests).Assembly)),
                parameters);

            resolver.Register(types.Assembly);

            var current_module = GetCurrentModule(parameters);
            var reference      = new TypeReference("", "DebuggingModes", current_module, null, true);

            reference.DeclaringType = new TypeReference("System.Diagnostics", "DebuggableAttribute", current_module, AssemblyNameReference.Parse(types.Assembly.FullName), false);

            var definition = reference.Resolve();

            Assert.IsNotNull(definition);
            Assert.AreEqual("System.Diagnostics.DebuggableAttribute/DebuggingModes", definition.FullName);
            Assert.AreEqual("mscorlib", definition.Module.Assembly.Name.Name);
        }
Ejemplo n.º 4
0
        public void RunRegistrar()
        {
            // The static registrar.
            if (Registrar != RegistrarMode.Static)
            {
                throw new ProductException(67, Errors.MT0067, Registrar);                  // this is only called during our own build
            }
            if (RootAssemblies.Count < 1)
            {
                throw ErrorHelper.CreateError(130, Errors.MX0130);
            }

            var registrar_m        = RegistrarOutputLibrary;
            var RootAssembly       = RootAssemblies [0];
            var resolvedAssemblies = new Dictionary <string, AssemblyDefinition> ();
            var resolver           = new PlatformResolver()
            {
                RootDirectory = Path.GetDirectoryName(RootAssembly),
#if MMP
                CommandLineAssemblies = RootAssemblies,
#endif
            };

            if (Platform == ApplePlatform.iOS)
            {
                if (Is32Build)
                {
                    resolver.ArchDirectory = Driver.GetArch32Directory(this);
                }
                else
                {
                    resolver.ArchDirectory = Driver.GetArch64Directory(this);
                }
            }

            var ps = new ReaderParameters();

            ps.AssemblyResolver = resolver;
            foreach (var reference in References)
            {
                var r = resolver.Load(reference);
                if (r == null)
                {
                    throw ErrorHelper.CreateError(2002, Errors.MT2002, reference);
                }
            }

            var  productAssembly      = Driver.GetProductAssembly(this);
            bool foundProductAssembly = false;

            foreach (var asm in RootAssemblies)
            {
                var rootName = Path.GetFileNameWithoutExtension(asm);
                if (rootName == productAssembly)
                {
                    foundProductAssembly = true;
                }

                try {
                    AssemblyDefinition lastAssembly = ps.AssemblyResolver.Resolve(AssemblyNameReference.Parse(rootName), new ReaderParameters());
                    if (lastAssembly == null)
                    {
                        ErrorHelper.CreateWarning(7, Errors.MX0007, rootName);
                        continue;
                    }

                    if (resolvedAssemblies.TryGetValue(rootName, out var previousAssembly))
                    {
                        if (lastAssembly.MainModule.RuntimeVersion != previousAssembly.MainModule.RuntimeVersion)
                        {
                            Driver.Log(2, "Attemping to load an assembly another time {0} (previous {1})", lastAssembly.FullName, previousAssembly.FullName);
                        }
                        continue;
                    }

                    resolvedAssemblies.Add(rootName, lastAssembly);
                    Driver.Log(3, "Loaded {0}", lastAssembly.MainModule.FileName);
                } catch (Exception ex) {
                    ErrorHelper.Warning(9, ex, Errors.MX0009, $"{rootName}: {ex.Message}");
                    continue;
                }
            }

            if (!foundProductAssembly)
            {
                throw ErrorHelper.CreateError(131, Errors.MX0131, productAssembly, string.Join("', '", RootAssemblies.ToArray()));
            }

#if MONOTOUCH
            if (SelectAbis(Abis, Abi.SimulatorArchMask).Count > 0)
            {
                BuildTarget = BuildTarget.Simulator;
            }
            else if (SelectAbis(Abis, Abi.DeviceArchMask).Count > 0)
            {
                BuildTarget = BuildTarget.Device;
            }
            else
            {
                throw ErrorHelper.CreateError(99, Errors.MX0099, "No valid ABI");
            }
#endif
            var registrar = new Registrar.StaticRegistrar(this);
            if (RootAssemblies.Count == 1)
            {
                registrar.GenerateSingleAssembly(resolvedAssemblies.Values, Path.ChangeExtension(registrar_m, "h"), registrar_m, Path.GetFileNameWithoutExtension(RootAssembly));
            }
            else
            {
                registrar.Generate(resolvedAssemblies.Values, Path.ChangeExtension(registrar_m, "h"), registrar_m);
            }
        }
Ejemplo n.º 5
0
        public BamlDecompilerTypeSystem(PEFile mainModule, IAssemblyResolver assemblyResolver)
        {
            if (mainModule == null)
            {
                throw new ArgumentNullException(nameof(mainModule));
            }
            if (assemblyResolver == null)
            {
                throw new ArgumentNullException(nameof(assemblyResolver));
            }
            // Load referenced assemblies and type-forwarder references.
            // This is necessary to make .NET Core/PCL binaries work better.
            var referencedAssemblies   = new List <PEFile>();
            var assemblyReferenceQueue = new Queue <(bool IsAssembly, PEFile MainModule, object Reference)>();
            var mainMetadata           = mainModule.Metadata;

            foreach (var h in mainMetadata.GetModuleReferences())
            {
                var moduleRef  = mainMetadata.GetModuleReference(h);
                var moduleName = mainMetadata.GetString(moduleRef.Name);
                foreach (var fileHandle in mainMetadata.AssemblyFiles)
                {
                    var file = mainMetadata.GetAssemblyFile(fileHandle);
                    if (mainMetadata.StringComparer.Equals(file.Name, moduleName) && file.ContainsMetadata)
                    {
                        assemblyReferenceQueue.Enqueue((false, mainModule, moduleName));
                        break;
                    }
                }
            }
            foreach (var refs in mainModule.AssemblyReferences)
            {
                assemblyReferenceQueue.Enqueue((true, mainModule, refs));
            }
            foreach (var bamlReference in defaultBamlReferences)
            {
                assemblyReferenceQueue.Enqueue((true, mainModule, AssemblyNameReference.Parse(bamlReference)));
            }
            var comparer = KeyComparer.Create(((bool IsAssembly, PEFile MainModule, object Reference)reference) =>
                                              reference.IsAssembly ? "A:" + ((IAssemblyReference)reference.Reference).FullName :
                                              "M:" + reference.Reference);
            var processedAssemblyReferences = new HashSet <(bool IsAssembly, PEFile Parent, object Reference)>(comparer);

            while (assemblyReferenceQueue.Count > 0)
            {
                var asmRef = assemblyReferenceQueue.Dequeue();
                if (!processedAssemblyReferences.Add(asmRef))
                {
                    continue;
                }
                PEFile asm;
                if (asmRef.IsAssembly)
                {
                    asm = assemblyResolver.Resolve((IAssemblyReference)asmRef.Reference);
                }
                else
                {
                    asm = assemblyResolver.ResolveModule(asmRef.MainModule, (string)asmRef.Reference);
                }
                if (asm != null)
                {
                    referencedAssemblies.Add(asm);
                    var metadata = asm.Metadata;
                    foreach (var h in metadata.ExportedTypes)
                    {
                        var exportedType = metadata.GetExportedType(h);
                        switch (exportedType.Implementation.Kind)
                        {
                        case HandleKind.AssemblyReference:
                            assemblyReferenceQueue.Enqueue((true, asm, new ICSharpCode.Decompiler.Metadata.AssemblyReference(asm, (AssemblyReferenceHandle)exportedType.Implementation)));
                            break;

                        case HandleKind.AssemblyFile:
                            var file = metadata.GetAssemblyFile((AssemblyFileHandle)exportedType.Implementation);
                            assemblyReferenceQueue.Enqueue((false, asm, metadata.GetString(file.Name)));
                            break;
                        }
                    }
                }
            }
            var mainModuleWithOptions           = mainModule.WithOptions(TypeSystemOptions.Default);
            var referencedAssembliesWithOptions = referencedAssemblies.Select(file => file.WithOptions(TypeSystemOptions.Default));

            // Primitive types are necessary to avoid assertions in ILReader.
            // Fallback to MinimalCorlib to provide the primitive types.
            if (!HasType(KnownTypeCode.Void) || !HasType(KnownTypeCode.Int32))
            {
                Init(mainModule.WithOptions(TypeSystemOptions.Default), referencedAssembliesWithOptions.Concat(new[] { MinimalCorlib.Instance }));
            }
            else
            {
                Init(mainModuleWithOptions, referencedAssembliesWithOptions);
            }
            this.MainModule = (MetadataModule)base.MainModule;

            bool HasType(KnownTypeCode code)
            {
                TopLevelTypeName name = KnownTypeReference.Get(code).TypeName;

                if (!mainModule.GetTypeDefinition(name).IsNil)
                {
                    return(true);
                }
                foreach (var file in referencedAssemblies)
                {
                    if (!file.GetTypeDefinition(name).IsNil)
                    {
                        return(true);
                    }
                }
                return(false);
            }
        }
Ejemplo n.º 6
0
        CustomAttrib.FixedArg ReadFixedArg(byte [] data, BinaryReader br,
                                           TypeReference param, ref bool read, bool resolve)
        {
            CustomAttrib.FixedArg fa = new CustomAttrib.FixedArg();
            if (param is ArrayType)
            {
                param      = ((ArrayType)param).ElementType;
                fa.SzArray = true;
                fa.NumElem = br.ReadUInt32();

                if (fa.NumElem == 0 || fa.NumElem == 0xffffffff)
                {
                    fa.Elems   = new CustomAttrib.Elem [0];
                    fa.NumElem = 0;
                    return(fa);
                }

                fa.Elems = new CustomAttrib.Elem [fa.NumElem];
                for (int i = 0; i < fa.NumElem; i++)
                {
                    fa.Elems [i] = ReadElem(data, br, param, ref read, resolve);
                }
            }
            else
            {
                fa.Elems = new CustomAttrib.Elem [] { ReadElem(data, br, param, ref read, resolve) }
            };

            return(fa);
        }

        TypeReference CreateEnumTypeReference(string enumName)
        {
            string asmName  = null;
            int    asmStart = enumName.IndexOf(',');

            if (asmStart != -1)
            {
                asmName  = enumName.Substring(asmStart + 1);
                enumName = enumName.Substring(0, asmStart);
            }
            // Inner class style is reflection style.
            enumName = enumName.Replace('+', '/');
            AssemblyNameReference asm;

            if (asmName == null)
            {
                // If no assembly is given then the ECMA standard says the
                // assembly is either the current one or mscorlib.
                if (m_reflectReader.Module.Types.Contains(enumName))
                {
                    return(m_reflectReader.Module.Types [enumName]);
                }

                asm = m_reflectReader.Corlib;
            }
            else
            {
                asm = AssemblyNameReference.Parse(asmName);
            }

            string [] outers        = enumName.Split('/');
            string    outerfullname = outers [0];
            string    ns            = null;
            int       nsIndex       = outerfullname.LastIndexOf('.');

            if (nsIndex != -1)
            {
                ns = outerfullname.Substring(0, nsIndex);
            }
            string        name    = outerfullname.Substring(nsIndex + 1);
            TypeReference decType = new TypeReference(name, ns, asm);

            for (int i = 1; i < outers.Length; i++)
            {
                TypeReference t = new TypeReference(outers [i], null, asm);
                t.Module        = m_reflectReader.Module;
                t.DeclaringType = decType;
                decType         = t;
            }
            decType.Module      = m_reflectReader.Module;
            decType.IsValueType = true;

            return(decType);
        }

        TypeReference ReadTypeReference(byte [] data, BinaryReader br, out ElementType elemType)
        {
            bool array = false;

            elemType = (ElementType)br.ReadByte();
            if (elemType == ElementType.SzArray)
            {
                elemType = (ElementType)br.ReadByte();
                array    = true;
            }

            TypeReference res;

            if (elemType == ElementType.Enum)
            {
                res = CreateEnumTypeReference(ReadUTF8String(data, br));
            }
            else
            {
                res = TypeReferenceFromElemType(elemType);
            }

            if (array)
            {
                res = new ArrayType(res);
            }

            return(res);
        }

        TypeReference TypeReferenceFromElemType(ElementType elemType)
        {
            switch (elemType)
            {
            case ElementType.Boxed:
            case ElementType.Object:
                return(m_reflectReader.SearchCoreType(Constants.Object));

            case ElementType.String:
                return(m_reflectReader.SearchCoreType(Constants.String));

            case ElementType.Type:
                return(m_reflectReader.SearchCoreType(Constants.Type));

            case ElementType.Boolean:
                return(m_reflectReader.SearchCoreType(Constants.Boolean));

            case ElementType.Char:
                return(m_reflectReader.SearchCoreType(Constants.Char));

            case ElementType.R4:
                return(m_reflectReader.SearchCoreType(Constants.Single));

            case ElementType.R8:
                return(m_reflectReader.SearchCoreType(Constants.Double));

            case ElementType.I1:
                return(m_reflectReader.SearchCoreType(Constants.SByte));

            case ElementType.I2:
                return(m_reflectReader.SearchCoreType(Constants.Int16));

            case ElementType.I4:
                return(m_reflectReader.SearchCoreType(Constants.Int32));

            case ElementType.I8:
                return(m_reflectReader.SearchCoreType(Constants.Int64));

            case ElementType.U1:
                return(m_reflectReader.SearchCoreType(Constants.Byte));

            case ElementType.U2:
                return(m_reflectReader.SearchCoreType(Constants.UInt16));

            case ElementType.U4:
                return(m_reflectReader.SearchCoreType(Constants.UInt32));

            case ElementType.U8:
                return(m_reflectReader.SearchCoreType(Constants.UInt64));

            default:
                throw new MetadataFormatException("Non valid type in CustomAttrib.Elem: 0x{0}",
                                                  ((byte)elemType).ToString("x2"));
            }
        }
Ejemplo n.º 7
0
        string ResolveI18nAssembly(DirectoryAssemblyResolver resolver, string name)
        {
            var assembly = resolver.Resolve(AssemblyNameReference.Parse(name));

            return(Path.GetFullPath(assembly.MainModule.FullyQualifiedName));
        }
Ejemplo n.º 8
0
        public AssemblyDefinition Resolve(string fullName)
        {
            AssemblyDefinition result = LocalResolve(fullName) ?? fallback.Resolve(AssemblyNameReference.Parse(fullName));

            return(result);
        }
Ejemplo n.º 9
0
 protected override IAssemblyInfo LoadAssemblyImpl(AssemblyName assemblyName)
 {
     return(Wrap(assemblyResolver.Resolve(AssemblyNameReference.Parse(assemblyName.FullName))));
 }
Ejemplo n.º 10
0
        public static TypeReference GetTypeReference(this XmlType xmlType, ModuleDefinition module, IXmlLineInfo xmlInfo)
        {
            if (s_xmlnsDefinitions == null)
            {
                GatherXmlnsDefinitionAttributes();
            }

            var namespaceURI  = xmlType.NamespaceUri;
            var elementName   = xmlType.Name;
            var typeArguments = xmlType.TypeArguments;

            var lookupAssemblies = new List <XmlnsDefinitionAttribute>();

            var lookupNames = new List <string>();

            foreach (var xmlnsDef in s_xmlnsDefinitions)
            {
                if (xmlnsDef.XmlNamespace != namespaceURI)
                {
                    continue;
                }
                lookupAssemblies.Add(xmlnsDef);
            }

            if (lookupAssemblies.Count == 0)
            {
                string ns;
                string typename;
                string asmstring;
                string targetPlatform;

                XmlnsHelper.ParseXmlns(namespaceURI, out typename, out ns, out asmstring, out targetPlatform);
                asmstring = asmstring ?? module.Assembly.Name.Name;
                lookupAssemblies.Add(new XmlnsDefinitionAttribute(namespaceURI, ns)
                {
                    AssemblyName = asmstring
                });
            }

            lookupNames.Add(elementName);
            lookupNames.Add(elementName + "Extension");

            for (var i = 0; i < lookupNames.Count; i++)
            {
                var name = lookupNames[i];
                if (name.Contains(":"))
                {
                    name = name.Substring(name.LastIndexOf(':') + 1);
                }
                if (typeArguments != null)
                {
                    name += "`" + typeArguments.Count;                     //this will return an open generic Type
                }
                lookupNames[i] = name;
            }

            TypeReference type = null;

            foreach (var asm in lookupAssemblies)
            {
                if (type != null)
                {
                    break;
                }
                foreach (var name in lookupNames)
                {
                    if (type != null)
                    {
                        break;
                    }

                    var assemblydefinition = module.Assembly.Name.Name == asm.AssemblyName ?
                                             module.Assembly :
                                             module.AssemblyResolver.Resolve(AssemblyNameReference.Parse(asm.AssemblyName));

                    type = assemblydefinition.MainModule.GetType(asm.ClrNamespace, name);
                    if (type == null)
                    {
                        var exportedtype =
                            assemblydefinition.MainModule.ExportedTypes.FirstOrDefault(
                                (ExportedType arg) => arg.IsForwarder && arg.Namespace == asm.ClrNamespace && arg.Name == name);
                        if (exportedtype != null)
                        {
                            type = exportedtype.Resolve();
                        }
                    }
                }
            }

            if (type != null && typeArguments != null && type.HasGenericParameters)
            {
                type =
                    module.ImportReference(type)
                    .MakeGenericInstanceType(typeArguments.Select(x => GetTypeReference(x, module, xmlInfo)).ToArray());
            }

            if (type == null)
            {
                throw new XamlParseException(string.Format("Type {0} not found in xmlns {1}", elementName, namespaceURI), xmlInfo);
            }

            return(module.ImportReference(type));
        }
Ejemplo n.º 11
0
        public TypeReference Retarget(TypeReference type, GenericContext context)
        {
            TypeReference reference;

            if (type == null)
            {
                return(type);
            }
            if ((type.IsFunctionPointer || type.IsOptionalModifier) || type.IsSentinel)
            {
                throw new NotImplementedException();
            }
            if (type.IsArray)
            {
                ArrayType type2 = (ArrayType)type;
                ArrayType type3 = new ArrayType(this.Retarget(type2.ElementType, context), type2.Rank);
                for (int i = 0; i < type2.Dimensions.Count; i++)
                {
                    ArrayDimension dimension = type2.Dimensions[i];
                    type3.Dimensions[i] = new ArrayDimension(dimension.LowerBound, dimension.UpperBound);
                }
                reference = type3;
            }
            else if (type.IsByReference)
            {
                ByReferenceType type4 = (ByReferenceType)type;
                reference = new ByReferenceType(this.Retarget(type4.ElementType, context));
            }
            else if (type.IsDefinition && Utility.SameScope(type.Scope, this.Module))
            {
                reference = type;
            }
            else if (type.IsGenericInstance)
            {
                GenericInstanceType type5 = (GenericInstanceType)type;
                GenericInstanceType type6 = new GenericInstanceType(this.Retarget(type5.ElementType, context));
                foreach (TypeReference reference2 in type5.GenericArguments)
                {
                    TypeReference item = this.Retarget(reference2, context);
                    type6.GenericArguments.Add(item);
                }
                reference = type6;
            }
            else
            {
                if (type.IsGenericParameter)
                {
                    GenericParameter parameter = (GenericParameter)type;
                    return(context.Retarget(parameter));
                }
                if (type.IsPinned)
                {
                    PinnedType type7 = (PinnedType)type;
                    reference = new PinnedType(this.Retarget(type7.ElementType, context));
                }
                else if (type.IsPointer)
                {
                    PointerType type8 = (PointerType)type;
                    reference = new PointerType(this.Retarget(type8.ElementType, context));
                }
                else if (type.IsRequiredModifier)
                {
                    RequiredModifierType type9 = (RequiredModifierType)type;
                    reference = new RequiredModifierType(this.Retarget(type9.ModifierType, context), this.Retarget(type9.ElementType, context));
                }
                else
                {
                    reference = type.Resolve();
                    if ((reference == null) && (this.OperationContext.Platform == Platform.UAP))
                    {
                        string fullName = null;
                        string str2     = type.FullName;
                        if ((!(str2 == "System.Collections.ArrayList") && !(str2 == "System.Collections.CollectionBase")) && (!(str2 == "System.Collections.Hashtable") && !(str2 == "System.Collections.Stack")))
                        {
                            if (str2 == "System.Reflection.BindingFlags")
                            {
                                fullName = "System.Reflection.TypeExtensions";
                            }
                        }
                        else
                        {
                            fullName = "System.Collections.NonGeneric";
                        }
                        if (fullName != null)
                        {
                            IMetadataScope scope = type.Scope;
                            type.Scope = AssemblyNameReference.Parse(fullName);
                            reference  = type.Resolve();
                            type.Scope = scope;
                        }
                    }
                }
            }
            return(this.Module.ImportReference(reference));
        }
Ejemplo n.º 12
0
        public AssemblyList CreateDefaultList(string name, string?path = null, string?newName = null)
        {
            var list = new AssemblyList(this, newName ?? name);

            switch (name)
            {
            case DotNet4List:
                AddToListFromGAC("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
                AddToListFromGAC("PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                AddToListFromGAC("PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                AddToListFromGAC("WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                break;

            case DotNet35List:
                AddToListFromGAC("mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                AddToListFromGAC("PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                AddToListFromGAC("WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                break;

            case ASPDotNetMVC3List:
                AddToListFromGAC("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                AddToListFromGAC("System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
                AddToListFromGAC("System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
                AddToListFromGAC("System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
                AddToListFromGAC("System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
                AddToListFromGAC("System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                AddToListFromGAC("System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                AddToListFromGAC("System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                AddToListFromGAC("System.Web.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                AddToListFromGAC("System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                AddToListFromGAC("System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                AddToListFromGAC("System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
                AddToListFromGAC("System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                AddToListFromGAC("System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
                AddToListFromGAC("System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                AddToListFromGAC("Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
                break;

            case object _ when path != null:
                foreach (var file in Directory.GetFiles(path, "*.dll"))
                {
                    var dllname = Path.GetFileName(file);
                    if (DoIncludeFile(dllname))
                    {
                        AddToListFromDirectory(file);
                    }
                }
                break;
            }
            return(list);

            void AddToListFromGAC(string fullName)
            {
                AssemblyNameReference reference = AssemblyNameReference.Parse(fullName);
                string?file = UniversalAssemblyResolver.GetAssemblyInGac(reference);

                if (file != null)
                {
                    list.OpenAssembly(file);
                }
            }

            void AddToListFromDirectory(string file)
            {
                if (File.Exists(file))
                {
                    list.OpenAssembly(file);
                }
            }

            bool DoIncludeFile(string fileName)
            {
                if (fileName == "Microsoft.DiaSymReader.Native.amd64.dll")
                {
                    return(false);
                }
                if (fileName.EndsWith("_cor3.dll", StringComparison.OrdinalIgnoreCase))
                {
                    return(false);
                }
                if (char.IsUpper(fileName[0]))
                {
                    return(true);
                }
                if (fileName == "netstandard.dll")
                {
                    return(true);
                }
                if (fileName == "mscorlib.dll")
                {
                    return(true);
                }
                return(false);
            }
        }
Ejemplo n.º 13
0
        /*********
        ** Public methods
        *********/
        /// <summary>Construct an instance.</summary>
        /// <param name="targetPlatform">The target game platform.</param>
        /// <param name="removeAssemblyNames">The assembly short names to remove (like <c>Stardew Valley</c>).</param>
        /// <param name="targetAssemblies">The assemblies to target.</param>
        public PlatformAssemblyMap(Platform targetPlatform, string[] removeAssemblyNames, Assembly[] targetAssemblies)
        {
            // save data
            this.TargetPlatform = targetPlatform;
            this.RemoveNames    = removeAssemblyNames;

            // cache assembly metadata
            this.Targets          = targetAssemblies;
            this.TargetReferences = this.Targets.ToDictionary(assembly => assembly, assembly => AssemblyNameReference.Parse(assembly.FullName));
#if SMAPI_FOR_MOBILE
            this.TargetModules = this.Targets.ToDictionary(assembly => assembly, assembly => ModuleDefinition.ReadModule(Path.Combine(Constants.ExecutionPath, assembly.Modules.Single().FullyQualifiedName), new ReaderParameters {
                InMemory = true
            }));
#else
            this.TargetModules = this.Targets.ToDictionary(assembly => assembly, assembly => ModuleDefinition.ReadModule(assembly.Modules.Single().FullyQualifiedName, new ReaderParameters {
                InMemory = true
            }));
#endif
        }
Ejemplo n.º 14
0
        private void LoadTypeDefinitions()
        {
            var argoAssemblyDef = AssemblyResolver.Resolve(AssemblyNameReference.Parse("RedArrow.Argo"));

            _hasOneAttributeTypeDef  = argoAssemblyDef.MainModule.GetType("RedArrow.Argo.Attributes.HasOneAttribute");
            _hasManyAttributeTypeDef = argoAssemblyDef.MainModule.GetType("RedArrow.Argo.Attributes.HasManyAttribute");
            _loadStrategyTypeDef     = argoAssemblyDef.MainModule.GetType("RedArrow.Argo.Attributes.LoadStrategy");

            _sessionTypeDef            = argoAssemblyDef.MainModule.GetType("RedArrow.Argo.Session.IModelSession");
            _resourceIdentifierTypeDef = argoAssemblyDef.MainModule.GetType("RedArrow.Argo.Model.IResourceIdentifier");

            _compilerGeneratedAttribute = argoAssemblyDef.MainModule
                                          .ImportReference(typeof(CompilerGeneratedAttribute).GetConstructor(new Type[0]))
                                          .Resolve();
            _debuggerBrowsableAttribute = argoAssemblyDef.MainModule
                                          .ImportReference(typeof(DebuggerBrowsableAttribute).GetConstructor(new[] { typeof(DebuggerBrowsableState) }))
                                          .Resolve();
            _debuggerBrowsableStateTypeDef = argoAssemblyDef.MainModule
                                             .ImportReference(typeof(DebuggerBrowsableState))
                                             .Resolve();

            _session_DisposedGetter = _sessionTypeDef
                                      .Properties
                                      .Single(x => x.Name == "Disposed")
                                      .GetMethod;
            _session_GetId = _sessionTypeDef
                             .Methods
                             .Single(x => x.Name == "GetId");
            _session_GetAttribute = _sessionTypeDef
                                    .Methods
                                    .Single(x => x.Name == "GetAttribute");
            _session_GetReferenceId = _sessionTypeDef
                                      .Methods
                                      .Single(x => x.Name == "GetReferenceId");
            _session_GetReference = _sessionTypeDef
                                    .Methods
                                    .Single(x => x.Name == "GetReference");
            _session_GetMeta = _sessionTypeDef
                               .Methods
                               .Single(x => x.Name == "GetMeta");
            _session_GetRelationshipIds = _sessionTypeDef
                                          .Methods
                                          .Single(x => x.Name == "GetRelationshipIds");
            _session_GetGenericEnumerable = _sessionTypeDef
                                            .Methods
                                            .Single(x => x.Name == "GetGenericEnumerable");
            _session_GetGenericCollection = _sessionTypeDef
                                            .Methods
                                            .Single(x => x.Name == "GetGenericCollection");

            _string_equals = ModuleDefinition
                             .TypeSystem
                             .String
                             .Resolve()
                             .Methods
                             .First(x => x.IsStatic &&
                                    x.Name == "Equals" &&
                                    x.Parameters.Count == 3 &&
                                    x.Parameters[0].ParameterType.Name == "String" &&
                                    x.Parameters[1].ParameterType.Name == "String" &&
                                    x.Parameters[2].ParameterType.Name == "StringComparison");

            _stringComparison_ordinal = (int)ModuleDefinition
                                        .Assembly
                                        .MainModule
                                        .ImportReference(typeof(StringComparison))
                                        .Resolve()
                                        .Fields
                                        .First(x => x.Name == "Ordinal")
                                        .Constant;

            _equalityComparerTypeDef = ModuleDefinition
                                       .Assembly
                                       .MainModule
                                       .ImportReference(typeof(EqualityComparer <>))
                                       .Resolve();

            _object_equals = ModuleDefinition
                             .TypeSystem
                             .Object
                             .Resolve()
                             .Methods
                             .First(x => x.Name == "Equals" && x.Parameters.Count == 2);
        }
        // this logic produces similar list of assemblies that IL2CPP will convert (it differs in the way it collects winmd files)
        public static IEnumerable <AssemblyDefinition> CollectAllAssemblies(string librariesFolder, RuntimeClassRegistry usedClasses)
        {
            var resolver = new DefaultAssemblyResolver();

            resolver.RemoveSearchDirectory(".");
            resolver.RemoveSearchDirectory("bin");
            resolver.AddSearchDirectory(librariesFolder);

            var usedDlls = usedClasses.GetUserAssemblies().Where(s => usedClasses.IsDLLUsed(s)).Select(file => AssemblyNameReference.Parse(Path.GetFileNameWithoutExtension(file)));

            return(CollectAssembliesRecursive(usedDlls.Select(dll => ResolveAssemblyReference(resolver, dll)).Where(a => a != null)));
        }
Ejemplo n.º 16
0
        LoadedAssembly LookupReferencedAssemblyInternal(string fullName)
        {
            foreach (LoadedAssembly asm in assemblyList.GetAssemblies())
            {
                if (asm.AssemblyDefinition != null && fullName.Equals(asm.AssemblyDefinition.FullName, StringComparison.OrdinalIgnoreCase))
                {
                    return(asm);
                }
            }
            if (assemblyLoadDisableCount > 0)
            {
                return(null);
            }

            if (!App.Current.Dispatcher.CheckAccess())
            {
                // Call this method on the GUI thread.
                return((LoadedAssembly)App.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new Func <string, LoadedAssembly>(LookupReferencedAssembly), fullName));
            }

            var    targetFramework = TargetFrameworkId.Split(new[] { ",Version=v" }, StringSplitOptions.None);
            var    name            = AssemblyNameReference.Parse(fullName);
            string file            = null;

            switch (targetFramework[0])
            {
            case ".NETCoreApp":
            case ".NETStandard":
                if (targetFramework.Length != 2)
                {
                    break;
                }
                if (dotNetCorePathFinder == null)
                {
                    var version = targetFramework[1].Length == 3 ? targetFramework[1] + ".0" : targetFramework[1];
                    dotNetCorePathFinder = new DotNetCorePathFinder(fileName, TargetFrameworkId, version, this.loadedAssemblyReferences);
                }
                file = dotNetCorePathFinder.TryResolveDotNetCore(name);
                break;

            default:
                file = GacInterop.FindAssemblyInNetGac(name);
                break;
            }
            if (file == null)
            {
                string dir = Path.GetDirectoryName(this.fileName);
                if (File.Exists(Path.Combine(dir, name.Name + ".dll")))
                {
                    file = Path.Combine(dir, name.Name + ".dll");
                }
                else if (File.Exists(Path.Combine(dir, name.Name + ".exe")))
                {
                    file = Path.Combine(dir, name.Name + ".exe");
                }
            }
            if (file != null)
            {
                loadedAssemblyReferences.AddMessage(fullName, MessageKind.Info, "Success - Loading from: " + file);
                return(assemblyList.OpenAssembly(file, true));
            }
            else
            {
                loadedAssemblyReferences.AddMessage(fullName, MessageKind.Error, "Could not find reference: " + fullName);
                return(null);
            }
        }
Ejemplo n.º 17
0
 public AssemblyDefinition Resolve(string fullName)
 {
     return(Resolve(AssemblyNameReference.Parse(fullName), null));
 }
Ejemplo n.º 18
0
            private static AssemblyDefinition OnRelinkerResolveFailure(object sender, AssemblyNameReference reference)
            {
                if (reference.FullName.ToLowerInvariant().Contains("fna") || reference.FullName.ToLowerInvariant().Contains("xna"))
                {
                    AssemblyName[] asmRefs = typeof(Celeste).Assembly.GetReferencedAssemblies();
                    for (int ari = 0; ari < asmRefs.Length; ari++)
                    {
                        AssemblyName asmRef = asmRefs[ari];
                        if (!asmRef.FullName.ToLowerInvariant().Contains("xna") &&
                            !asmRef.FullName.ToLowerInvariant().Contains("fna") &&
                            !asmRef.FullName.ToLowerInvariant().Contains("monogame")
                            )
                        {
                            continue;
                        }
                        return(((DefaultAssemblyResolver)_Modder.AssemblyResolver).Resolve(AssemblyNameReference.Parse(asmRef.FullName)));
                    }
                }

                return(null);
            }
Ejemplo n.º 19
0
        public void RunRegistrar()
        {
            // The static registrar.
            if (Registrar != RegistrarMode.Static)
            {
                throw new PlatformException(67, "Invalid registrar: {0}", Registrar);                  // this is only called during our own build
            }
            if (RootAssemblies.Count < 1)
            {
                throw ErrorHelper.CreateError(130, "No root assemblies found. You should provide at least one root assembly.");
            }

            var registrar_m        = RegistrarOutputLibrary;
            var RootAssembly       = RootAssemblies [0];
            var resolvedAssemblies = new Dictionary <string, AssemblyDefinition> ();
            var resolver           = new PlatformResolver()
            {
                FrameworkDirectory = Driver.GetPlatformFrameworkDirectory(this),
                RootDirectory      = Path.GetDirectoryName(RootAssembly),
#if MMP
                CommandLineAssemblies = RootAssemblies,
#endif
            };

            if (Platform == ApplePlatform.iOS || Platform == ApplePlatform.MacOSX)
            {
                if (Is32Build)
                {
                    resolver.ArchDirectory = Driver.GetArch32Directory(this);
                }
                else
                {
                    resolver.ArchDirectory = Driver.GetArch64Directory(this);
                }
            }

            var ps = new ReaderParameters();

            ps.AssemblyResolver = resolver;
            resolvedAssemblies.Add("mscorlib", ps.AssemblyResolver.Resolve(AssemblyNameReference.Parse("mscorlib"), new ReaderParameters()));

            var  productAssembly      = Driver.GetProductAssembly(this);
            bool foundProductAssembly = false;

            foreach (var asm in RootAssemblies)
            {
                var rootName = Path.GetFileNameWithoutExtension(asm);
                if (rootName == productAssembly)
                {
                    foundProductAssembly = true;
                }

                try {
                    AssemblyDefinition lastAssembly = ps.AssemblyResolver.Resolve(AssemblyNameReference.Parse(rootName), new ReaderParameters());
                    if (lastAssembly == null)
                    {
                        ErrorHelper.CreateWarning(7, "The root assembly '{0}' does not exist", rootName);
                        continue;
                    }

                    if (resolvedAssemblies.TryGetValue(rootName, out var previousAssembly))
                    {
                        if (lastAssembly.MainModule.RuntimeVersion != previousAssembly.MainModule.RuntimeVersion)
                        {
                            Driver.Log(2, "Attemping to load an assembly another time {0} (previous {1})", lastAssembly.FullName, previousAssembly.FullName);
                        }
                        continue;
                    }

                    resolvedAssemblies.Add(rootName, lastAssembly);
                    Driver.Log(3, "Loaded {0}", lastAssembly.MainModule.FileName);
                } catch (Exception ex) {
                    ErrorHelper.Warning(9, ex, "Error while loading assemblies: {0}: {1}", rootName, ex.Message);
                    continue;
                }
            }

            if (!foundProductAssembly)
            {
                throw ErrorHelper.CreateError(131, "Product assembly '{0}' not found in assembly list: '{1}'", productAssembly, string.Join("', '", RootAssemblies.ToArray()));
            }

#if MONOTOUCH
            BuildTarget = BuildTarget.Simulator;
#endif
            var registrar = new Registrar.StaticRegistrar(this);
            if (RootAssemblies.Count == 1)
            {
                registrar.GenerateSingleAssembly(resolvedAssemblies.Values, Path.ChangeExtension(registrar_m, "h"), registrar_m, Path.GetFileNameWithoutExtension(RootAssembly));
            }
            else
            {
                registrar.Generate(resolvedAssemblies.Values, Path.ChangeExtension(registrar_m, "h"), registrar_m);
            }
        }
Ejemplo n.º 20
0
 public AssemblyDefinition Resolve(string fullName)
 {
     return(Resolve(AssemblyNameReference.Parse(fullName), new ReaderParameters {
         AssemblyResolver = this
     }));
 }
Ejemplo n.º 21
0
 public AssemblyDefinition Resolve(string fullName, ReaderParameters parameters)
 {
     return(Resolve(AssemblyNameReference.Parse(fullName), parameters));
 }
Ejemplo n.º 22
0
        Assembly LoadI18nAssembly(string name)
        {
            var assembly = ManifestResolver.Resolve(AssemblyNameReference.Parse(name));

            return(new Assembly(this, assembly));
        }
Ejemplo n.º 23
0
 static AssemblyNameReference GetAssemblyName(XPathNavigator nav)
 {
     return(AssemblyNameReference.Parse(GetAttribute(nav, "fullname")));
 }
Ejemplo n.º 24
0
        static TypeDefinition ResolveXmlns(string xmlNamespace, string typeName, AssemblyDefinition context, IEnumerable <AssemblyDefinition> asms)
        {
            typeName = typeName.Replace('+', '/');
            if (xmlNamespace.StartsWith("clr-namespace:"))
            {
                string ns, asmName;
                SplitClrNsUri(xmlNamespace, out ns, out asmName);

                AssemblyDefinition asm;
                if (asmName == null)
                {
                    asm = context;
                }
                else
                {
                    asmName = AssemblyNameReference.Parse(asmName).Name;
                    if (asmName == context.Name.Name)
                    {
                        asm = context;
                    }
                    else
                    {
                        asm = asms.SingleOrDefault(_ => _.Name.Name == asmName);
                    }
                }

                if (asm != null)
                {
                    if (string.IsNullOrEmpty(ns))
                    {
                        return(asm.MainModule.GetType(typeName));
                    }
                    else
                    {
                        return(asm.MainModule.GetType(string.Format("{0}.{1}", ns, typeName)));
                    }
                }
            }
            else
            {
                foreach (var i in asms)
                {
                    foreach (var attr in i.CustomAttributes.Where(_ => _.AttributeType.FullName == "System.Windows.Markup.XmlnsDefinitionAttribute"))
                    {
                        string uri   = attr.ConstructorArguments[0].Value as string;
                        string clrNs = attr.ConstructorArguments[1].Value as string;
                        if (uri == xmlNamespace)
                        {
                            TypeDefinition typeDef;
                            if (string.IsNullOrEmpty(clrNs))
                            {
                                typeDef = i.MainModule.GetType(typeName);
                            }
                            else
                            {
                                typeDef = i.MainModule.GetType(string.Format("{0}.{1}", clrNs, typeName));
                            }
                            if (typeDef != null)
                            {
                                return(typeDef);
                            }
                        }
                    }
                }
            }
            return(null);
        }
Ejemplo n.º 25
0
 protected virtual AssemblyNameReference GetAssemblyName(XPathNavigator nav)
 {
     return(AssemblyNameReference.Parse(GetFullName(nav)));
 }
Ejemplo n.º 26
0
        private void ProcessBaml(ModuleDefinition mod, Dictionary <string, BamlDocument> bamls, ref int cc, DictionaryEntry entry, Stream stream)
        {
            cc++;
            docName = entry.Key as string;
            doc     = BamlReader.ReadDocument(stream);
            (mod as IAnnotationProvider).Annotations[RenMode] = NameMode.Letters;

            for (int i = 0; i < doc.Count; i++)
            {
                if (doc[i] is LineNumberAndPositionRecord || doc[i] is LinePositionRecord)
                {
                    doc.RemoveAt(i); i--;
                }
            }

            int asmId = -1;
            Dictionary <ushort, AssemblyDefinition> asms = new Dictionary <ushort, AssemblyDefinition>();

            foreach (var rec in doc.OfType <AssemblyInfoRecord>())
            {
                AssemblyNameReference nameRef = AssemblyNameReference.Parse(rec.AssemblyFullName);
                if (nameRef.Name == mod.Assembly.Name.Name)
                {
                    asmId = rec.AssemblyId;
                    rec.AssemblyFullName = GetBamlAssemblyFullName(mod.Assembly.Name);
                    asms.Add(rec.AssemblyId, mod.Assembly);
                    PopulateMembers(mod.Assembly);
                    nameRef = null;
                }
                else
                {
                    bool added = false;
                    foreach (var i in ivtMap)
                    {
                        if (i.Key.Name.Name == nameRef.Name)
                        {
                            rec.AssemblyFullName = GetBamlAssemblyFullName(i.Key.Name);
                            asms.Add(rec.AssemblyId, i.Key);
                            PopulateMembers(i.Key);
                            nameRef = null;
                            added   = true;
                            break;
                        }
                    }
                    if (!added)
                    {
                        var asmRefDef = GlobalAssemblyResolver.Instance.Resolve(nameRef);
                        if (asmRefDef != null)
                        {
                            PopulateMembers(asmRefDef);
                        }
                    }
                }
            }

            Dictionary <ushort, TypeDefinition> types = new Dictionary <ushort, TypeDefinition>();

            foreach (var rec in doc.OfType <TypeInfoRecord>())
            {
                AssemblyDefinition asm;
                if (asms.TryGetValue((ushort)(rec.AssemblyId & 0xfff), out asm))
                {
                    TypeReference type = TypeParser.ParseType(asm.MainModule, rec.TypeFullName);
                    if (type != null)
                    {
                        types.Add(rec.TypeId, type.Resolve());
                        AddTypeRenRefs(type, type, rec);
                        rec.TypeFullName = TypeParser.ToParseable(type);
                    }
                }
            }

            Dictionary <string, string> xmlns = new Dictionary <string, string>();

            foreach (var rec in doc.OfType <XmlnsPropertyRecord>())
            {
                xmlns[rec.Prefix] = rec.XmlNamespace;
            }

            Dictionary <ushort, string> ps = new Dictionary <ushort, string>();

            foreach (var rec in doc.OfType <AttributeInfoRecord>())
            {
                if (types.ContainsKey(rec.OwnerTypeId))
                {
                    PropertyDefinition prop = types[rec.OwnerTypeId].Properties.SingleOrDefault(p => p.Name == rec.Name);
                    if (prop != null)
                    {
                        ((prop as IAnnotationProvider).Annotations[RenRef] as List <IReference>).Add(new BamlAttributeReference(rec));
                    }
                    EventDefinition evt = types[rec.OwnerTypeId].Events.SingleOrDefault(p => p.Name == rec.Name);
                    if (evt != null)
                    {
                        ((evt as IAnnotationProvider).Annotations[RenRef] as List <IReference>).Add(new BamlAttributeReference(rec));
                    }
                    FieldDefinition field = types[rec.OwnerTypeId].Fields.SingleOrDefault(p => p.Name == rec.Name);
                    if (field != null)
                    {
                        ((field as IAnnotationProvider).Annotations[RenRef] as List <IReference>).Add(new BamlAttributeReference(rec));
                    }

                    //Attached property
                    MethodDefinition getM = types[rec.OwnerTypeId].Methods.SingleOrDefault(p => p.Name == "Get" + rec.Name);
                    if (getM != null)
                    {
                        (getM as IAnnotationProvider).Annotations[RenOk] = false;
                    }
                    MethodDefinition setM = types[rec.OwnerTypeId].Methods.SingleOrDefault(p => p.Name == "Set" + rec.Name);
                    if (setM != null)
                    {
                        (setM as IAnnotationProvider).Annotations[RenOk] = false;
                    }
                }
                ps.Add(rec.AttributeId, rec.Name);
            }

            foreach (var rec in doc.OfType <PropertyWithConverterRecord>())
            {
                if (rec.ConverterTypeId == 0xfd4c || ((short)rec.AttributeId > 0 && ps[rec.AttributeId] == "TypeName"))  //TypeExtension
                {
                    string type = rec.Value;

                    string xmlNamespace;
                    if (type.IndexOf(':') != -1)
                    {
                        xmlNamespace = xmlns[type.Substring(0, type.IndexOf(':'))];
                        type         = type.Substring(type.IndexOf(':') + 1, type.Length - type.IndexOf(':') - 1);
                    }
                    else
                    {
                        xmlNamespace = xmlns[""];
                    }
                    TypeDefinition typeDef;
                    if ((typeDef = ResolveXmlns(xmlNamespace, type, mod.Assembly, asms.Values)) != null)
                    {
                        ((typeDef as IAnnotationProvider).Annotations[RenRef] as List <IReference>).Add(new BamlTypeExtReference(rec, doc, typeDef.Module.Assembly.Name.Name));
                    }
                }
                if (rec.ConverterTypeId == 0xff77 || rec.ConverterTypeId == 0xfe14 || rec.ConverterTypeId == 0xfd99)
                {
                    ProcessProperty(rec, rec.Value);
                }
            }

            for (int i = 1; i < doc.Count; i++)
            {
                ElementStartRecord binding             = doc[i - 1] as ElementStartRecord;
                ConstructorParametersStartRecord param = doc[i] as ConstructorParametersStartRecord;
                if (binding != null && param != null && binding.TypeId == 0xffec)//Binding
                {
                    TextRecord path = doc[i + 1] as TextRecord;
                    ProcessProperty(path, path.Value);
                }
            }

            var rootRec = doc.OfType <ElementStartRecord>().FirstOrDefault();

            if (rootRec != null && types.ContainsKey(rootRec.TypeId))
            {
                TypeDefinition root = types[rootRec.TypeId];
                Dictionary <string, IMemberDefinition> m = new Dictionary <string, IMemberDefinition>();
                foreach (PropertyDefinition prop in root.Properties)
                {
                    m.Add(prop.Name, prop);
                }
                foreach (EventDefinition evt in root.Events)
                {
                    m.Add(evt.Name, evt);
                }
                //foreach (MethodDefinition mtd in root.Methods)
                //    mems.Add(mtd.Name, mtd);

                foreach (var rec in doc.OfType <PropertyRecord>())
                {
                    if (!(rec.Value is string))
                    {
                        continue;
                    }
                    if (m.ContainsKey((string)rec.Value))
                    {
                        ((m[(string)rec.Value] as IAnnotationProvider).Annotations[RenRef] as List <IReference>).Add(new BamlPropertyReference(rec));
                    }
                }
            }

            bamls.Add(entry.Key as string, doc);
        }
        public void ExportedTypeFromModule()
        {
            var resolver   = new CustomResolver();
            var parameters = new ReaderParameters {
                AssemblyResolver = resolver
            };
            var mma = GetResourceModule("mma.exe", parameters);

            resolver.Register(mma.Assembly);

            var current_module = GetCurrentModule(parameters);
            var reference      = new TypeReference("Module.A", "Foo", current_module, AssemblyNameReference.Parse(mma.Assembly.FullName), false);

            var definition = reference.Resolve();

            Assert.IsNotNull(definition);
            Assert.AreEqual("Module.A.Foo", definition.FullName);
        }
Ejemplo n.º 28
0
 public virtual AssemblyDefinition Resolve(string fullName)
 {
     return(this.Resolve(AssemblyNameReference.Parse(fullName)));
 }
Ejemplo n.º 29
0
        /// <summary>
        /// Resolve an assembly by name.
        /// </summary>
        public AssemblyDefinition Resolve(string fullName)
        {
            var name = AssemblyNameReference.Parse(fullName);

            return(Resolve(name));
        }
Ejemplo n.º 30
0
 public static AssemblyDefinition GetAssembly(this IAssemblyResolver resolver, string fileName)
 {
     return(resolver.Resolve(AssemblyNameReference.Parse(Path.GetFileNameWithoutExtension(fileName))));
 }