/// <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;
     }
 }
Esempio n. 2
0
        public sealed override String[] GetReferences(bool keepextension)
        {
            var references = new List<string>();
			var resolver = new ReflexilAssemblyResolver();

	        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 (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();
        }