internal static IEnumerable <string> GetProjectFrameworks( string projectFilePath, string targetFrameworks, string targetFramework, string targetFrameworkMoniker, string targetPlatformMoniker, string targetPlatformIdentifier, string targetPlatformVersion, string targetPlatformMinVersion, string clrSupport, bool isXnaWindowsPhoneProject, bool isManagementPackProject) { var frameworks = new SortedSet <string>(StringComparer.OrdinalIgnoreCase); // TargetFrameworks property frameworks.UnionWith(MSBuildStringUtility.Split(targetFrameworks)); if (frameworks.Count > 0) { return(frameworks); } // TargetFramework property var currentFrameworkString = MSBuildStringUtility.TrimAndGetNullForEmpty(targetFramework); if (!string.IsNullOrEmpty(currentFrameworkString)) { frameworks.Add(currentFrameworkString); return(frameworks); } return(new string[] { GetProjectFramework( projectFilePath, targetFrameworkMoniker, targetPlatformMoniker, targetPlatformIdentifier, targetPlatformVersion, targetPlatformMinVersion, clrSupport, isXnaWindowsPhoneProject, isManagementPackProject).DotNetFrameworkName }); }
/// <summary> /// Determine the target framework of an msbuild project. /// </summary> public static IEnumerable <string> GetProjectFrameworkStrings( string projectFilePath, string targetFrameworks, string targetFramework, string targetFrameworkMoniker, string targetPlatformIdentifier, string targetPlatformVersion, string targetPlatformMinVersion, bool isXnaWindowsPhoneProject, bool isManagementPackProject) { var frameworks = new SortedSet <string>(StringComparer.OrdinalIgnoreCase); // TargetFrameworks property frameworks.UnionWith(MSBuildStringUtility.Split(targetFrameworks)); if (frameworks.Count > 0) { return(frameworks); } // TargetFramework property var currentFrameworkString = MSBuildStringUtility.TrimAndGetNullForEmpty(targetFramework); if (!string.IsNullOrEmpty(currentFrameworkString)) { frameworks.Add(currentFrameworkString); return(frameworks); } // C++ check if (projectFilePath?.EndsWith(".vcxproj", StringComparison.OrdinalIgnoreCase) == true) { // The C++ project does not have a TargetFrameworkMoniker property set. // We hard-code the return value to Native. frameworks.Add("Native, Version=0.0"); return(frameworks); } // The MP project does not have a TargetFrameworkMoniker property set. // We hard-code the return value to SCMPInfra. if (isManagementPackProject) { frameworks.Add("SCMPInfra, Version=0.0"); return(frameworks); } // UAP/Windows store projects var platformIdentifier = MSBuildStringUtility.TrimAndGetNullForEmpty(targetPlatformIdentifier); var platformVersion = MSBuildStringUtility.TrimAndGetNullForEmpty(targetPlatformMinVersion); // if targetPlatformMinVersion isn't defined then fallback to targetPlatformVersion if (string.IsNullOrEmpty(platformVersion)) { platformVersion = MSBuildStringUtility.TrimAndGetNullForEmpty(targetPlatformVersion); } // Check for JS project if (projectFilePath?.EndsWith(".jsproj", StringComparison.OrdinalIgnoreCase) == true) { // JavaScript apps do not have a TargetFrameworkMoniker property set. // We read the TargetPlatformIdentifier and targetPlatformMinVersion instead // use the default values for JS if they were not given if (string.IsNullOrEmpty(platformVersion)) { platformVersion = "0.0"; } if (string.IsNullOrEmpty(platformIdentifier)) { platformIdentifier = FrameworkConstants.FrameworkIdentifiers.Windows; } frameworks.Add($"{platformIdentifier}, Version={platformVersion}"); return(frameworks); } if (!string.IsNullOrEmpty(platformVersion) && StringComparer.OrdinalIgnoreCase.Equals(platformIdentifier, "UAP")) { // Use the platform id and versions, this is done for UAP projects frameworks.Add($"{platformIdentifier}, Version={platformVersion}"); return(frameworks); } // TargetFrameworkMoniker currentFrameworkString = MSBuildStringUtility.TrimAndGetNullForEmpty(targetFrameworkMoniker); if (!string.IsNullOrEmpty(currentFrameworkString)) { // XNA project lies about its true identity, reporting itself as a normal .NET 4.0 project. // We detect it and changes its target framework to Silverlight4-WindowsPhone71 if (isXnaWindowsPhoneProject && ".NETFramework,Version=v4.0".Equals(currentFrameworkString, StringComparison.OrdinalIgnoreCase)) { currentFrameworkString = "Silverlight,Version=v4.0,Profile=WindowsPhone71"; } frameworks.Add(currentFrameworkString); return(frameworks); } // Default to unsupported it no framework can be found. if (frameworks.Count < 1) { frameworks.Add(NuGetFramework.UnsupportedFramework.ToString()); } return(frameworks); }
internal static NuGetFramework GetProjectFramework( string projectFilePath, string targetFrameworkMoniker, string targetPlatformMoniker, string targetPlatformIdentifier, string targetPlatformVersion, string targetPlatformMinVersion, bool isXnaWindowsPhoneProject, bool isManagementPackProject) { // C++ check if (projectFilePath?.EndsWith(".vcxproj", StringComparison.OrdinalIgnoreCase) == true) { // The C++ project does not have a TargetFrameworkMoniker property set. // We hard-code the return value to Native. return(NuGetFramework.Parse("Native, Version=0.0")); } // The MP project does not have a TargetFrameworkMoniker property set. // We hard-code the return value to SCMPInfra. if (isManagementPackProject) { return(NuGetFramework.Parse("SCMPInfra, Version=0.0")); } // UAP/Windows store projects var platformMoniker = MSBuildStringUtility.TrimAndGetNullForEmpty(targetPlatformMoniker); var platformMonikerIdentifier = GetParts(platformMoniker).FirstOrDefault(); var platformIdentifier = MSBuildStringUtility.TrimAndGetNullForEmpty(targetPlatformIdentifier); var platformMinVersion = MSBuildStringUtility.TrimAndGetNullForEmpty(targetPlatformMinVersion); var platformVersion = MSBuildStringUtility.TrimAndGetNullForEmpty(targetPlatformVersion); var effectivePlatformVersion = platformMinVersion ?? platformVersion; var effectivePlatformIdentifier = platformMonikerIdentifier ?? platformIdentifier; // Check for JS project if (projectFilePath?.EndsWith(".jsproj", StringComparison.OrdinalIgnoreCase) == true) { // JavaScript apps do not have a TargetFrameworkMoniker property set. // We read the TargetPlatformIdentifier and targetPlatformMinVersion instead // use the default values for JS if they were not given // Prefer moniker over individual properties if (!string.IsNullOrEmpty(platformMoniker)) { return(GetFrameworkFromMoniker(platformMonikerIdentifier, platformMoniker, platformMinVersion)); } if (string.IsNullOrEmpty(effectivePlatformVersion)) { effectivePlatformVersion = "0.0"; } if (string.IsNullOrEmpty(effectivePlatformIdentifier)) { effectivePlatformIdentifier = FrameworkConstants.FrameworkIdentifiers.Windows; } return(NuGetFramework.Parse($"{effectivePlatformIdentifier}, Version={effectivePlatformVersion}")); } if (StringComparer.OrdinalIgnoreCase.Equals(effectivePlatformIdentifier, "UAP")) { // Use the platform id and versions, this is done for UAP projects // Prefer moniker over individual properties if (!string.IsNullOrEmpty(platformMoniker)) { return(GetFrameworkFromMoniker(effectivePlatformIdentifier, platformMoniker, platformMinVersion)); } if (!string.IsNullOrEmpty(effectivePlatformVersion)) { return(NuGetFramework.Parse($"{effectivePlatformIdentifier}, Version={effectivePlatformVersion}")); } } // TargetFrameworkMoniker var currentFrameworkString = MSBuildStringUtility.TrimAndGetNullForEmpty(targetFrameworkMoniker); if (!string.IsNullOrEmpty(currentFrameworkString)) { // XNA project lies about its true identity, reporting itself as a normal .NET 4.0 project. // We detect it and changes its target framework to Silverlight4-WindowsPhone71 if (isXnaWindowsPhoneProject && ".NETFramework,Version=v4.0".Equals(currentFrameworkString, StringComparison.OrdinalIgnoreCase)) { currentFrameworkString = "Silverlight,Version=v4.0,Profile=WindowsPhone71"; return(NuGetFramework.Parse(currentFrameworkString)); } NuGetFramework framework = NuGetFramework.ParseComponents(currentFrameworkString, platformMoniker); return(framework); } // Default to unsupported it no framework was found. return(NuGetFramework.UnsupportedFramework); }