Example #1
0
        /// <summary>
        /// Load assembly from disk
        /// </summary>
        /// <param name="location">assembly location</param>
        /// <param name="loadsymbols">load symbols</param>
        /// <returns></returns>
        public override AssemblyDefinition LoadAssembly(string location, bool loadsymbols)
        {
            ReaderParameters parameters = new ReaderParameters();

            parameters.ReadSymbols = loadsymbols;
            parameters.ReadingMode = ReadingMode.Deferred;
            var resolver = new ReflexilAssemblyResolver();

            try
            {
                return(resolver.ReadAssembly(location, parameters));
            } catch (Exception)
            {
                // perhaps pdb file is not found, just ignore this time
                if (loadsymbols)
                {
                    parameters.ReadSymbols = false;
                    return(resolver.ReadAssembly(location, parameters));
                }
                else
                {
                    throw;
                }
            }
        }
Example #2
0
        public sealed override string[] GetReferences(bool keepextension, CompilerProfile profile)
        {
            var references = new List <string>();

            var parameters = new ReaderParameters
            {
                ReadSymbols = false,
                ReadingMode = ReadingMode.Deferred,
                InMemory    = true,
            };
            var resolver = new ReflexilAssemblyResolver(parameters);

            var filename    = _mdefsource.DeclaringType.Module.Image.FileName;
            var currentPath = Path.GetDirectoryName(filename);

            if (currentPath != null)
            {
                Directory.SetCurrentDirectory(currentPath);
                resolver.AddSearchDirectory(currentPath);
                // Properly register assembly, so we can find it even if the name is changed
                resolver.RegisterAssembly(_mdefsource.DeclaringType.Module.Assembly);
            }

            foreach (var asmref in CompileReferences)
            {
                string reference;

                if ((profile == null || !profile.NoStdLib) && (asmref.Name == "mscorlib" || asmref.Name.StartsWith("System")))
                {
                    reference = asmref.Name + (keepextension ? ".dll" : string.Empty);
                }
                else
                {
                    try
                    {
                        var asmdef = resolver.Resolve(asmref);
                        reference = asmdef.MainModule.Image.FileName;
                    }
                    catch (Exception)
                    {
                        continue;
                    }
                }

                if (!references.Contains(reference))
                {
                    references.Add(reference);
                }
            }

            return(references.ToArray());
        }
Example #3
0
        public virtual AssemblyDefinition LoadAssembly(string location, bool readsymbols)
        {
            var parameters = new ReaderParameters
            {
                ReadSymbols = readsymbols,
                ReadingMode = ReadingMode.Deferred,
                InMemory    = true,
                ThrowIfSymbolsAreNotMatching = false,
                SymbolReaderProvider         = readsymbols ? new DefaultSymbolReaderProvider(false) : null
            };
            var resolver = new ReflexilAssemblyResolver(parameters);

            return(resolver.ReadAssembly(location));
        }
Example #4
0
        public virtual AssemblyDefinition LoadAssembly(string location, bool readsymbols)
        {
            var parameters = new ReaderParameters {
                ReadSymbols = readsymbols, ReadingMode = ReadingMode.Deferred
            };
            var resolver = new ReflexilAssemblyResolver();

            try
            {
                return(resolver.ReadAssembly(location, parameters));
            }
            catch (Exception)
            {
                // perhaps pdb file is not found, just ignore this time
                if (!readsymbols)
                {
                    throw;
                }

                parameters.ReadSymbols = false;
                return(resolver.ReadAssembly(location, parameters));
            }
        }