/// <summary> /// Selects a target runtime framework for a TestPackage based on /// the settings in the package and the assemblies themselves. /// The package RuntimeFramework setting may be updated as a /// result and the selected runtime is returned. /// </summary> /// <param name="package">A TestPackage</param> /// <returns>The selected RuntimeFramework</returns> public RuntimeFramework SelectRuntimeFramework(TestPackage package) { RuntimeFramework currentFramework = RuntimeFramework.CurrentFramework; RuntimeFramework requestedFramework = package.Settings["RuntimeFramework"] as RuntimeFramework; log.Debug("Current framework is {0}", currentFramework); if (requestedFramework == null) log.Debug("No specific framework requested"); else log.Debug("Requested framework is {0}", requestedFramework); RuntimeType targetRuntime = requestedFramework == null ? RuntimeType.Any : requestedFramework.Runtime; Version targetVersion = requestedFramework == null ? RuntimeFramework.DefaultVersion : requestedFramework.FrameworkVersion; if (targetRuntime == RuntimeType.Any) targetRuntime = currentFramework.Runtime; if (targetVersion == RuntimeFramework.DefaultVersion) { if (Services.UserSettings.GetSetting("Options.TestLoader.RuntimeSelectionEnabled", true)) foreach (string assembly in package.Assemblies) { using (AssemblyReader reader = new AssemblyReader(assembly)) { string vString = reader.ImageRuntimeVersion; if (vString.Length > 1) // Make sure it's a valid dot net assembly { Version v = new Version(vString.Substring(1)); log.Debug("Assembly {0} uses version {1}", assembly, v); if (v > targetVersion) targetVersion = v; } } } else targetVersion = RuntimeFramework.CurrentFramework.ClrVersion; RuntimeFramework checkFramework = new RuntimeFramework(targetRuntime, targetVersion); if (!checkFramework.IsAvailable || !Services.TestAgency.IsRuntimeVersionSupported(targetVersion)) { log.Debug("Preferred version {0} is not installed or this NUnit installation does not support it", targetVersion); if (targetVersion < currentFramework.FrameworkVersion) targetVersion = currentFramework.FrameworkVersion; } } RuntimeFramework targetFramework = new RuntimeFramework(targetRuntime, targetVersion); package.Settings["RuntimeFramework"] = targetFramework; log.Debug("Test will use {0} framework", targetFramework); return targetFramework; }
/// <summary> /// Selects a target runtime framework for a TestPackage based on /// the settings in the package and the assemblies themselves. /// The package RuntimeFramework setting may be updated as a /// result and the selected runtime is returned. /// </summary> /// <param name="package">A TestPackage</param> /// <returns>The selected RuntimeFramework</returns> public RuntimeFramework SelectRuntimeFramework(TestPackage package) { RuntimeFramework currentFramework = RuntimeFramework.CurrentFramework; RuntimeFramework requestedFramework = package.Settings["RuntimeFramework"] as RuntimeFramework; log.Debug("Current framework is {0}", currentFramework); if (requestedFramework == null) log.Debug("No specific framework requested"); else log.Debug("Requested framework is {0}", requestedFramework); RuntimeType targetRuntime = requestedFramework == null ? RuntimeType.Any : requestedFramework.Runtime; Version targetVersion = requestedFramework == null ? RuntimeFramework.DefaultVersion : requestedFramework.FrameworkVersion; if (targetRuntime == RuntimeType.Any) targetRuntime = currentFramework.Runtime; if (targetVersion == RuntimeFramework.DefaultVersion) { foreach (string assembly in package.Assemblies) { using (AssemblyReader reader = new AssemblyReader(assembly)) { Version v = new Version(reader.ImageRuntimeVersion.Substring(1)); log.Debug("Assembly {0} uses version {1}", assembly, v); if (v > targetVersion) targetVersion = v; } } RuntimeFramework checkFramework = new RuntimeFramework(targetRuntime, targetVersion); if (!checkFramework.IsAvailable || NUnitConfiguration.GetTestAgentExePath(targetVersion) == null) { log.Debug("Preferred version {0} is not installed or this NUnit installation does not support it", targetVersion); if (targetVersion < currentFramework.FrameworkVersion) targetVersion = currentFramework.FrameworkVersion; } } RuntimeFramework targetFramework = new RuntimeFramework(targetRuntime, targetVersion); package.Settings["RuntimeFramework"] = targetFramework; log.Debug("Test will use {0} framework", targetFramework); return targetFramework; }
private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { string fullName = args.Name; int index = fullName.IndexOf(','); if (index == -1) // Only resolve using full name. { log.Debug(string.Format("Not a strong name: {0}", fullName)); return(null); } if (_cache.Contains(fullName)) { log.Info(string.Format("Resolved from Cache: {0}", fullName)); return(_cache.Resolve(fullName)); } foreach (string dir in _dirs) { foreach (string file in Directory.GetFiles(dir, "*.dll")) { string fullFile = Path.Combine(dir, file); using (AssemblyReader rdr = new AssemblyReader(fullFile)) { try { if (rdr.IsDotNetFile) { if (AssemblyName.GetAssemblyName(fullFile).FullName == fullName) { log.Info(string.Format("Added to Cache: {0}", fullFile)); AddFile(fullFile); return(_cache.Resolve(fullName)); } } } catch (Exception ex) { log.Error("Unable to load addin assembly", ex); throw; } } } } log.Debug(string.Format("Not in Cache: {0}", fullName)); return(null); }
private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { string fullName = args.Name; int index = fullName.IndexOf(','); if(index == -1) // Only resolve using full name. { log.Debug( string.Format("Not a strong name: {0}", fullName ) ); return null; } if ( _cache.Contains( fullName ) ) { log.Info( string.Format( "Resolved from Cache: {0}", fullName ) ); return _cache.Resolve(fullName); } foreach( string dir in _dirs ) { foreach( string file in Directory.GetFiles( dir, "*.dll" ) ) { string fullFile = Path.Combine( dir, file ); using (AssemblyReader rdr = new AssemblyReader(fullFile)) { try { if (rdr.IsDotNetFile) { if (AssemblyName.GetAssemblyName(fullFile).FullName == fullName) { log.Info(string.Format("Added to Cache: {0}", fullFile)); AddFile(fullFile); return _cache.Resolve(fullName); } } } catch (Exception ex) { log.Error("Unable to load addin assembly", ex); throw; } } } } log.Debug( string.Format( "Not in Cache: {0}", fullName) ); return null; }