public void GetProjectFramework_WithCLRSupport_VariousInputs(
            string projectFilePath,
            string targetFrameworkMoniker,
            string targetPlatformMoniker,
            string targetPlatformMinVersion,
            string clrSupport,
            string expectedPrimaryShortName,
            string expectedSecondaryShortName)
        {
            var nugetFramework = MSBuildProjectFrameworkUtility.GetProjectFramework(
                projectFilePath: projectFilePath,
                targetFrameworkMoniker,
                targetPlatformMoniker,
                targetPlatformMinVersion,
                clrSupport);

            Assert.Equal(expectedPrimaryShortName, nugetFramework.GetShortFolderName());
            if (expectedSecondaryShortName != null)
            {
                Assert.IsAssignableFrom(typeof(DualCompatibilityFramework), nugetFramework);
                var extendedFramework = nugetFramework as DualCompatibilityFramework;
                Assert.Equal(expectedPrimaryShortName, extendedFramework.RootFramework.GetShortFolderName());
                Assert.Equal(expectedSecondaryShortName, extendedFramework.SecondaryFramework.GetShortFolderName());
            }
            else
            {
                Assert.Null(nugetFramework as DualCompatibilityFramework);
            }
        }
 public void GetProjectFramework_WithInvalidInput_Throws(
     string targetFrameworkMoniker,
     string targetPlatformMoniker,
     string targetPlatformMinVersion)
 {
     Assert.ThrowsAny <Exception>(() => MSBuildProjectFrameworkUtility.GetProjectFramework(
                                      projectFilePath: @"C:\csproj",
                                      targetFrameworkMoniker,
                                      targetPlatformMoniker,
                                      targetPlatformMinVersion));
 }
Exemple #3
0
        internal static NuGetFramework GetTargetFramework(IVsProjectProperties properties, string projectFullPath)
        {
            var targetFrameworkMoniker   = GetPropertyValueOrNull(properties, ProjectBuildProperties.TargetFrameworkMoniker);
            var targetPlatformMoniker    = GetPropertyValueOrNull(properties, ProjectBuildProperties.TargetPlatformIdentifier);
            var targetPlatformMinVersion = GetPropertyValueOrNull(properties, ProjectBuildProperties.TargetPlatformMinVersion);

            return(MSBuildProjectFrameworkUtility.GetProjectFramework(
                       projectFullPath,
                       targetFrameworkMoniker,
                       targetPlatformMoniker,
                       targetPlatformMinVersion));
        }
        public void GetProjectFramework_WithCanonicalProperties_Succeeds(
            string targetFrameworkMoniker,
            string targetPlatformMoniker,
            string targetPlatformMinVersion,
            string expectedShortName)
        {
            var nugetFramework = MSBuildProjectFrameworkUtility.GetProjectFramework(
                projectFilePath: @"C:\csproj",
                targetFrameworkMoniker,
                targetPlatformMoniker,
                targetPlatformMinVersion);

            Assert.Equal(expectedShortName, nugetFramework.GetShortFolderName());
        }
        public IVsNuGetFramework GetNearestImpl(IVsNuGetFramework targetFramework, IEnumerable <IVsNuGetFramework> fallbackTargetFrameworks, IEnumerable <IVsNuGetFramework> frameworks)
        {
            if (targetFramework == null)
            {
                throw new ArgumentNullException(nameof(targetFramework));
            }

            if (fallbackTargetFrameworks == null)
            {
                throw new ArgumentNullException(nameof(fallbackTargetFrameworks));
            }

            if (frameworks == null)
            {
                throw new ArgumentNullException(nameof(frameworks));
            }

            var inputFrameworks = new Dictionary <NuGetFramework, IVsNuGetFramework>();

            NuGetFramework ToNuGetFramework(IVsNuGetFramework framework, string paramName)
            {
                NuGetFramework nugetFramework = MSBuildProjectFrameworkUtility.GetProjectFramework(
                    projectFilePath: null,
                    targetFrameworkMoniker: framework.TargetFrameworkMoniker,
                    targetPlatformMoniker: framework.TargetPlatformMoniker,
                    targetPlatformMinVersion: framework.TargetPlatformMinVersion);

                if (!nugetFramework.IsSpecificFramework)
                {
                    throw new ArgumentException($"Framework '{framework}' could not be parsed", paramName);
                }
                inputFrameworks[nugetFramework] = framework;
                return(nugetFramework);
            }

            List <NuGetFramework> ToNuGetFrameworks(IEnumerable <IVsNuGetFramework> enumerable, string paramName)
            {
                var list = new List <NuGetFramework>();

                foreach (var framework in enumerable)
                {
                    if (framework == null)
                    {
                        throw new ArgumentException("Enumeration contains a null value", paramName);
                    }
                    NuGetFramework nugetFramework = ToNuGetFramework(framework, paramName);
                    list.Add(nugetFramework);
                }
                return(list);
            }

            NuGetFramework        targetNuGetFramework          = ToNuGetFramework(targetFramework, nameof(targetFramework));
            List <NuGetFramework> nugetFallbackTargetFrameworks = ToNuGetFrameworks(fallbackTargetFrameworks, nameof(fallbackTargetFrameworks));
            List <NuGetFramework> nugetFrameworks = ToNuGetFrameworks(frameworks, nameof(frameworks));

            try
            {
                if (nugetFallbackTargetFrameworks.Count > 0)
                {
                    targetNuGetFramework = new FallbackFramework(targetNuGetFramework, nugetFallbackTargetFrameworks);
                }

                var reducer = new FrameworkReducer();
                var nearest = reducer.GetNearest(targetNuGetFramework, nugetFrameworks);

                if (nearest == null)
                {
                    return(null);
                }

                var originalFrameworkString = inputFrameworks[nearest];
                return(originalFrameworkString);
            }
            catch (Exception exception)
            {
                _telemetryProvider.PostFault(exception, typeof(VsFrameworkCompatibility).FullName);
                throw;
            }
        }