PageRenderTime 44ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/src/NUnit/util/RuntimeFrameworkSelector.cs

#
C# | 73 lines | 50 code | 10 blank | 13 comment | 13 complexity | d721005a5b79b67f6cafab24de2035a4 MD5 | raw file
Possible License(s): GPL-2.0
  1. // ****************************************************************
  2. // Copyright 2010, Charlie Poole
  3. // This is free software licensed under the NUnit license. You may
  4. // obtain a copy of the license at http://nunit.org
  5. // ****************************************************************
  6. using System;
  7. using NUnit.Core;
  8. namespace NUnit.Util
  9. {
  10. public class RuntimeFrameworkSelector : IRuntimeFrameworkSelector
  11. {
  12. static Logger log = InternalTrace.GetLogger(typeof(RuntimeFrameworkSelector));
  13. /// <summary>
  14. /// Selects a target runtime framework for a TestPackage based on
  15. /// the settings in the package and the assemblies themselves.
  16. /// The package RuntimeFramework setting may be updated as a
  17. /// result and the selected runtime is returned.
  18. /// </summary>
  19. /// <param name="package">A TestPackage</param>
  20. /// <returns>The selected RuntimeFramework</returns>
  21. public RuntimeFramework SelectRuntimeFramework(TestPackage package)
  22. {
  23. RuntimeFramework currentFramework = RuntimeFramework.CurrentFramework;
  24. RuntimeFramework requestedFramework = package.Settings["RuntimeFramework"] as RuntimeFramework;
  25. log.Debug("Current framework is {0}", currentFramework);
  26. if (requestedFramework == null)
  27. log.Debug("No specific framework requested");
  28. else
  29. log.Debug("Requested framework is {0}", requestedFramework);
  30. RuntimeType targetRuntime = requestedFramework == null
  31. ? RuntimeType.Any
  32. : requestedFramework.Runtime;
  33. Version targetVersion = requestedFramework == null
  34. ? RuntimeFramework.DefaultVersion
  35. : requestedFramework.FrameworkVersion;
  36. if (targetRuntime == RuntimeType.Any)
  37. targetRuntime = currentFramework.Runtime;
  38. if (targetVersion == RuntimeFramework.DefaultVersion)
  39. {
  40. foreach (string assembly in package.Assemblies)
  41. {
  42. using (AssemblyReader reader = new AssemblyReader(assembly))
  43. {
  44. Version v = new Version(reader.ImageRuntimeVersion.Substring(1));
  45. log.Debug("Assembly {0} uses version {1}", assembly, v);
  46. if (v > targetVersion) targetVersion = v;
  47. }
  48. }
  49. RuntimeFramework checkFramework = new RuntimeFramework(targetRuntime, targetVersion);
  50. if (!checkFramework.IsAvailable || NUnitConfiguration.GetTestAgentExePath(targetVersion) == null)
  51. {
  52. log.Debug("Preferred version {0} is not installed or this NUnit installation does not support it", targetVersion);
  53. if (targetVersion < currentFramework.FrameworkVersion)
  54. targetVersion = currentFramework.FrameworkVersion;
  55. }
  56. }
  57. RuntimeFramework targetFramework = new RuntimeFramework(targetRuntime, targetVersion);
  58. package.Settings["RuntimeFramework"] = targetFramework;
  59. log.Debug("Test will use {0} framework", targetFramework);
  60. return targetFramework;
  61. }
  62. }
  63. }