| File: GetFrameworkPath.cs | Web Access |
| Project: src\msbuild\src\Tasks\Microsoft.Build.Tasks.csproj (Microsoft.Build.Tasks.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; #nullable disable namespace Microsoft.Build.Tasks { /// <summary> /// Returns the paths to the various frameworks versions. /// </summary> [MSBuildMultiThreadableTask] public class GetFrameworkPath : TaskExtension { #region ITask Members /// <summary> /// Does nothing: getters do all the work /// </summary> public override bool Execute() { return true; } #endregion #region Properties // PERF NOTE: We cache these values in statics -- although the code we call does this too, // it still seems to give an advantage perhaps because there is one less string copy. // In a large build, this adds up. // PERF NOTE: We also only find paths we are actually asked for (via <Output> tags) private static readonly Lazy<string> s_path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Latest)); private static readonly Lazy<string> s_version11Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version11)); private static readonly Lazy<string> s_version20Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version20)); private static readonly Lazy<string> s_version30Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version30)); private static readonly Lazy<string> s_version35Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version35)); private static readonly Lazy<string> s_version40Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version40)); private static readonly Lazy<string> s_version45Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version45)); private static readonly Lazy<string> s_version451Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version451)); private static readonly Lazy<string> s_version452Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version452)); private static readonly Lazy<string> s_version46Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version46)); private static readonly Lazy<string> s_version461Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version461)); private static readonly Lazy<string> s_version462Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version462)); private static readonly Lazy<string> s_version47Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version47)); private static readonly Lazy<string> s_version471Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version471)); private static readonly Lazy<string> s_version472Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version472)); private static readonly Lazy<string> s_version48Path = new Lazy<string>(() => ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version48)); /// <summary> /// Path to the latest framework, whatever version it happens to be /// </summary> [Output] public string Path => s_path.Value; /// <summary> /// Path to the v1.1 framework, if available /// </summary> [Output] public string FrameworkVersion11Path => s_version11Path.Value; /// <summary> /// Path to the v2.0 framework, if available /// </summary> [Output] public string FrameworkVersion20Path => s_version20Path.Value; /// <summary> /// Path to the v3.0 framework, if available /// </summary> [Output] public string FrameworkVersion30Path => s_version30Path.Value; /// <summary> /// Path to the v3.5 framework, if available /// </summary> [Output] public string FrameworkVersion35Path => s_version35Path.Value; /// <summary> /// Path to the v4.0 framework, if available /// </summary> [Output] public string FrameworkVersion40Path => s_version40Path.Value; /// <summary> /// Path to the v4.5 framework, if available /// </summary> [Output] public string FrameworkVersion45Path => s_version45Path.Value; /// <summary> /// Path to the v4.5.1 framework, if available /// </summary> [Output] public string FrameworkVersion451Path => s_version451Path.Value; /// <summary> /// Path to the v4.5.2 framework, if available /// </summary> [Output] public string FrameworkVersion452Path => s_version452Path.Value; /// <summary> /// Path to the v4.6 framework, if available /// </summary> [Output] public string FrameworkVersion46Path => s_version46Path.Value; /// <summary> /// Path to the v4.6.1 framework, if available /// </summary> [Output] public string FrameworkVersion461Path => s_version461Path.Value; /// <summary> /// Path to the v4.6.2 framework, if available /// </summary> [Output] public string FrameworkVersion462Path => s_version462Path.Value; /// <summary> /// Path to the v4.7 framework, if available /// </summary> [Output] public string FrameworkVersion47Path => s_version47Path.Value; /// <summary> /// Path to the v4.7.1 framework, if available /// </summary> [Output] public string FrameworkVersion471Path => s_version471Path.Value; /// <summary> /// Path to the v4.7.2 framework, if available /// </summary> [Output] public string FrameworkVersion472Path => s_version472Path.Value; /// <summary> /// Path to the v4.8 framework, if available /// </summary> [Output] public string FrameworkVersion48Path => s_version48Path.Value; #endregion } }