public static Project GetProject(Solution solution,
                                         string assemblyName,
                                         FrameworkKind frameworkKind)
        {
            if (solution == null)
            {
                throw new ArgumentNullException(nameof(solution));
            }

            var project  = default(Project);
            var projects = solution.Projects.Where(
                p => p.AssemblyName.Equals(
                    assemblyName,
                    StringComparison.Ordinal))
                           .ToList();

            var filterFor = "net";

            switch (frameworkKind)
            {
            case FrameworkKind.Core:
                filterFor = "netcoreapp";
                break;

            case FrameworkKind.Standard:
                filterFor = "netstandard";
                break;
            }

            if (projects.Count >= 2)
            {
                var matchingKindsOfProjects = new Dictionary <double, Project>();

                // Get all projects of the same kind.
                foreach (var p in projects)
                {
                    var(framework, version) = GetFrameworkFromProjectName(p.Name);

                    if (framework.Equals(filterFor, StringComparison.Ordinal))
                    {
                        matchingKindsOfProjects.Add(version, p);
                    }
                }

                // Use the highest version.
                var maxKey = matchingKindsOfProjects.Keys.Max();
                project = matchingKindsOfProjects[maxKey];
            }
            else
            {
                project = projects.FirstOrDefault();
            }

            if (project == null)
            {
                throw new Exception("Failed to find the project.");
            }

            return(project);
        }
Example #2
0
 static FrameworkKind Best(FrameworkKind a, FrameworkKind b)
 {
     if (a == FrameworkKind.SelfContainedDotNet || b == FrameworkKind.SelfContainedDotNet)
     {
         return(FrameworkKind.SelfContainedDotNet);
     }
     if (a == FrameworkKind.DotNet || b == FrameworkKind.DotNet)
     {
         return(FrameworkKind.DotNet);
     }
     if (a == FrameworkKind.Unity || b == FrameworkKind.Unity)
     {
         return(FrameworkKind.Unity);
     }
     if (a == FrameworkKind.WindowsUniversal || b == FrameworkKind.WindowsUniversal)
     {
         return(FrameworkKind.WindowsUniversal);
     }
     if (a == FrameworkKind.DotNetFramework4 || b == FrameworkKind.DotNetFramework4)
     {
         return(FrameworkKind.DotNetFramework4);
     }
     if (a == FrameworkKind.DotNetFramework2 || b == FrameworkKind.DotNetFramework2)
     {
         return(FrameworkKind.DotNetFramework2);
     }
     Debug.Assert(a == FrameworkKind.Unknown && b == FrameworkKind.Unknown);
     return(FrameworkKind.Unknown);
 }
Example #3
0
 static FrameworkKind Best(FrameworkKind a, FrameworkKind b)
 {
     if (a == FrameworkKind.SelfContainedDotNetCore || b == FrameworkKind.SelfContainedDotNetCore)
     {
         return(FrameworkKind.SelfContainedDotNetCore);
     }
     if (a == FrameworkKind.DotNetCore || b == FrameworkKind.DotNetCore)
     {
         return(FrameworkKind.DotNetCore);
     }
     if (a == FrameworkKind.Unity || b == FrameworkKind.Unity)
     {
         return(FrameworkKind.Unity);
     }
     if (a == FrameworkKind.DotNetFramework4 || b == FrameworkKind.DotNetFramework4)
     {
         return(FrameworkKind.DotNetFramework4);
     }
     if (a == FrameworkKind.DotNetFramework2 || b == FrameworkKind.DotNetFramework2)
     {
         return(FrameworkKind.DotNetFramework2);
     }
     Debug.Assert(a == FrameworkKind.Unknown && b == FrameworkKind.Unknown);
     return(FrameworkKind.Unknown);
 }
Example #4
0
		static FrameworkKind Best(FrameworkKind a, FrameworkKind b) {
			if (a == FrameworkKind.DotNetCore || b == FrameworkKind.DotNetCore)
				return FrameworkKind.DotNetCore;
			if (a == FrameworkKind.Unity || b == FrameworkKind.Unity)
				return FrameworkKind.Unity;
			if (a == FrameworkKind.DotNetFramework4 || b == FrameworkKind.DotNetFramework4)
				return FrameworkKind.DotNetFramework4;
			if (a == FrameworkKind.DotNetFramework2 || b == FrameworkKind.DotNetFramework2)
				return FrameworkKind.DotNetFramework2;
			Debug.Assert(a == FrameworkKind.Unknown && b == FrameworkKind.Unknown);
			return FrameworkKind.Unknown;
		}
Example #5
0
        static bool IgnorePublicKey(FrameworkKind fwkKind)
        {
            switch (fwkKind)
            {
            case FrameworkKind.Unknown:
            case FrameworkKind.DotNetFramework2:
            case FrameworkKind.DotNetFramework4:
                return(false);

            case FrameworkKind.DotNetCore:
            case FrameworkKind.SelfContainedDotNetCore:
            case FrameworkKind.Unity:
            case FrameworkKind.WindowsUniversal:
                return(true);

            default:
                throw new InvalidOperationException();
            }
        }
Example #6
0
 public FrameworkPathInfo(string directory)
 {
     Directory     = directory ?? throw new ArgumentNullException(nameof(directory));
     FrameworkKind = FrameworkKind.Unknown;
 }