using System; using System.Collections.Generic; using System.IO; using System.Reflection; namespace MbUnit.ReSharperRunner { [Serializable] public class PlugInAssemblyResolver : MarshalByRefObject { public Assembly Resolve(object sender, ResolveEventArgs args) { return Resolve(args.Name); } private static Assembly Resolve(string assemblyName) { string[] fileNames = GetFilenames(assemblyName); var paths = new List { Environment.CurrentDirectory, Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) }; foreach (string path in paths) { foreach (string fileName in fileNames) { string assemblyFile = Path.Combine(path, fileName); if (File.Exists(assemblyFile)) { return Assembly.LoadFrom(assemblyFile); } } } return null; } private static string[] GetFilenames(string name) { var fileNames = new List(); string[] nameSegments = name.Split(new[] {','}); fileNames.Add(Path.GetFileName(nameSegments[0])); fileNames.Add(Path.GetFileName(nameSegments[0]) + ".dll"); fileNames.Add(Path.GetFileNameWithoutExtension(nameSegments[0]) + ".dll"); fileNames.Add(Path.GetFileNameWithoutExtension(nameSegments[0]) + ".exe"); fileNames.Add(Path.GetFileName(nameSegments[0]) + ".exe"); fileNames.Add(nameSegments[0]); return fileNames.ToArray(); } } }