ToolLocationHelper Class
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
ToolLocationHelper provides utility methods for locating .NET Framework and .NET Framework SDK directories and files. NOTE: All public methods of this class are available to MSBuild projects for use in functions - they must be safe for use during project evaluation.
public ref class ToolLocationHelper abstract sealed
public static class ToolLocationHelper
type ToolLocationHelper = class
Public Class ToolLocationHelper
- Inheritance
-
ToolLocationHelper
Examples
The following example creates a ToolTask that runs Ilasm.exe (IL Assembler). The CommandLineBuilder, ToolLocationHelper, and TaskLoggingHelper classes are used to generate the information needed to run the task.
using System;
using System.Collections;
using System.Text;
using Microsoft.Build.Utilities;
using Microsoft.Build.Framework;
namespace MSBuildTasks
{
/// <summary>
/// A very simple and incomplete ToolTask to wrap the ILASM.EXE tool.
/// </summary>
public class ILAsm : ToolTask
{
#region Member Data
/// <summary>
/// Gets the collection of parameters used by the task class.
/// </summary>
/// <value>Parameter bag.</value>
protected internal Hashtable Bag
{
get
{
return bag;
}
}
private Hashtable bag = new Hashtable();
#endregion
#region ILAsm Task Properties
/// <summary>
/// The Source file that is to be compled (.il)
/// </summary>
public ITaskItem Source
{
get { return Bag["Source"] as ITaskItem; }
set { Bag["Source"] = value; }
}
/// <summary>
/// Either EXE or DLL indicating the assembly type to be generated
/// </summary>
public string TargetType
{
get { return Bag["TargetType"] as string; }
set { Bag["TargetType"] = value; }
}
#endregion
#region ToolTask Members
protected override string ToolName
{
get { return "ILAsm.exe"; }
}
/// <summary>
/// Use ToolLocationHelper to find ILASM.EXE in the Framework directory
/// </summary>
/// <returns></returns>
protected override string GenerateFullPathToTool()
{
// Ask ToolLocationHelper to find ILASM.EXE - it will look in the latest framework directory available
return ToolLocationHelper.GetPathToDotNetFrameworkFile(ToolName, TargetDotNetFrameworkVersion.VersionLatest);
}
#endregion
#region ILAsm Task Members
/// <summary>
/// Construct the command line from the task properties by using the CommandLineBuilder
/// </summary>
/// <returns></returns>
protected override string GenerateCommandLineCommands()
{
CommandLineBuilder builder = new CommandLineBuilder();
// We don't need the tool's logo information shown
builder.AppendSwitch("/nologo");
string targetType = Bag["TargetType"] as string;
// Be explicit with our switches
if (targetType != null)
{
if (String.Compare(targetType, "DLL", true) == 0)
{
builder.AppendSwitch("/DLL");
}
else if (String.Compare(targetType, "EXE", true) == 0)
{
builder.AppendSwitch("/EXE");
}
else
{
Log.LogWarning("Invalid TargetType (valid values are DLL and EXE) specified: {0}", targetType);
}
}
// Add the filename that we want the tool to process
builder.AppendFileNameIfNotNull(Bag["Source"] as ITaskItem);
// Log a High importance message stating the file that we are assembling
Log.LogMessage(MessageImportance.High, "Assembling {0}", Bag["Source"]);
// We have all of our switches added, return the commandline as a string
return builder.ToString();
}
#endregion
}
}
Imports System.Collections
Imports System.Text
Imports Microsoft.Build.Utilities
Imports Microsoft.Build.Framework
Namespace MSBuildTasks
''' <summary>
''' A very simple and incomplete ToolTask to wrap the ILASM.EXE tool.
''' </summary>
Public Class ILAsm
Inherits ToolTask
''' <summary>
''' Parameter bag.
''' </summary>
Protected Friend ReadOnly Property Bag() As Hashtable
Get
Return propertyBag
End Get
End Property
Private propertyBag As New Hashtable()
''' <summary>
''' The Source file that is to be compled (.il)
''' </summary>
Public Property [Source]() As ITaskItem
Get
Return Bag("Source")
End Get
Set(ByVal value As ITaskItem)
Bag("Source") = value
End Set
End Property
''' <summary>
''' Either EXE or DLL indicating the assembly type to be generated
''' </summary>
Public Property TargetType() As String
Get
Return Bag("TargetType")
End Get
Set(ByVal value As String)
Bag("TargetType") = value
End Set
End Property '
Protected Overrides ReadOnly Property ToolName() As String
Get
Return "ILAsm.exe"
End Get
End Property
''' <summary>
''' Use ToolLocationHelper to find ILASM.EXE in the Framework directory
''' </summary>
Protected Overrides Function GenerateFullPathToTool() As String
' Ask ToolLocationHelper to find ILASM.EXE - it will look in the latest framework directory available
Return ToolLocationHelper.GetPathToDotNetFrameworkFile(ToolName, TargetDotNetFrameworkVersion.VersionLatest)
End Function
''' <summary>
''' Construct the command line from the task properties by using the CommandLineBuilder
''' </summary>
Protected Overrides Function GenerateCommandLineCommands() As String
Dim builder As New CommandLineBuilder()
' We don't need the tool's logo information shown
builder.AppendSwitch("/nologo")
Dim targetType As String = Bag("TargetType")
' Be explicit with our switches
If Not (targetType Is Nothing) Then
If [String].Compare(targetType, "DLL", True) = 0 Then
builder.AppendSwitch("/DLL")
ElseIf [String].Compare(targetType, "EXE", True) = 0 Then
builder.AppendSwitch("/EXE")
Else
Log.LogWarning("Invalid TargetType (valid values are DLL and EXE) specified: {0}", targetType)
End If
End If
' Add the filename that we want the tool to process
builder.AppendFileNameIfNotNull(Bag("Source"))
' Log a High importance message stating the file that we are assembling
Log.LogMessage(MessageImportance.High, "Assembling {0}", Bag("Source"))
' We have all of our switches added, return the commandline as a string
Return builder.ToString()
End Function
End Class
End Namespace
Properties
CurrentToolsVersion |
The current ToolsVersion. |
PathToSystem |
Gets the fully qualified path to the system directory i.e. %SystemRoot%\System32 |
Methods
ClearSDKStaticCache() |
Clear out the appdomain wide cache of Platform and Extension SDKs. |
FilterPlatformExtensionSDKs(Version, IDictionary<String,String>) |
Gets a dictionary containing a collection of extension SDKs and filter it based on the target platform version if max platform version isn't set in the extension sdk manifest, add the extension sdk to the filtered list |
FilterTargetPlatformSdks(IList<TargetPlatformSDK>, Version, Version) |
Filter list of platform sdks based on minimum OS and VS versions |
FindRootFolderWhereAllFilesExist(String, String) |
Finds first folder in the list which contains all given files. Returns an empty string if not found. |
GetAssemblyFoldersExInfo(String, String, String, String, String, ProcessorArchitecture) |
Get a sorted list of AssemblyFoldersExInfo which contain information about what directories the 3rd party assemblies are registered under for use during build and design time. This method will enumerate the AssemblyFoldersEx registry location and return a list of AssemblyFoldersExInfo in the same order in which they will be searched during both design and build time for reference assemblies. |
GetAssemblyFoldersFromConfigInfo(String, String, ProcessorArchitecture) |
Get a sorted list of AssemblyFoldersFromConfigInfo which contain information about what directories the 3rd party assemblies are registered under for use during build and design time. This method will read the specified configuration file and enumerate the and return a list of AssemblyFoldersFromConfigInfo in the same order in which they will be searched during both design and build time for reference assemblies. |
GetDisplayNameForTargetFrameworkDirectory(String, FrameworkName) |
Figures out a display name given the target framework details. This is the equivalent of the target framework moniker, but for display. If one cannot be found from the redist list file, a synthesized one is returned, so there is always a display name. |
GetDotNetFrameworkRootRegistryKey(TargetDotNetFrameworkVersion) |
Returns the full name of the .NET Framework root registry key |
GetDotNetFrameworkSdkInstallKeyValue(TargetDotNetFrameworkVersion, VisualStudioVersion) |
Name of the value of GetDotNetFrameworkRootRegistryKey that contains the SDK install root path |
GetDotNetFrameworkSdkInstallKeyValue(TargetDotNetFrameworkVersion) |
Name of the value of GetDotNetFrameworkRootRegistryKey that contains the SDK install root path. When targeting .NET 3.5 or above, looks in the locations associated with Visual Studio 2010. If you wish to target the .NET Framework SDK that ships with Visual Studio Dev11 or later, please use the override that specifies a VisualStudioVersion. |
GetDotNetFrameworkSdkRootRegistryKey(TargetDotNetFrameworkVersion, VisualStudioVersion) |
Returns the full name of the .NET Framework SDK root registry key |
GetDotNetFrameworkSdkRootRegistryKey(TargetDotNetFrameworkVersion) |
Returns the full name of the .NET Framework SDK root registry key. When targeting .NET 3.5 or above, looks in the locations associated with Visual Studio 2010. If you wish to target the .NET Framework SDK that ships with Visual Studio Dev11 or later, please use the override that specifies a VisualStudioVersion. |
GetDotNetFrameworkVersionFolderPrefix(TargetDotNetFrameworkVersion) |
Returns the prefix of the .NET Framework version folder (e.g. "v2.0") |
GetFoldersInVSInstalls(Version, Version, String) |
Returns folders in VS installs of specifid range of versions, starting with 15.0. |
GetFoldersInVSInstallsAsString(String, String, String) |
Returns folders in VS installs of specified range of versions (starting with 15.0) separated by ';'. |
GetLatestSDKTargetPlatformVersion(String, String, String[]) |
Given an SDK Identifier and SDK version, return the latest installed platform. |
GetLatestSDKTargetPlatformVersion(String, String) |
Given an SDK Identifier and SDK version, return the latest installed platform. |
GetPathToBuildTools(String, DotNetFrameworkArchitecture) |
Given a ToolsVersion, return the path to the MSBuild tools for that ToolsVersion |
GetPathToBuildTools(String) |
Given a ToolsVersion, return the path to the MSBuild tools for that ToolsVersion |
GetPathToBuildToolsFile(String, String, DotNetFrameworkArchitecture) |
Given the name of a file and a ToolsVersion, return the path to that file in the MSBuild tools path for that ToolsVersion |
GetPathToBuildToolsFile(String, String) |
Given the name of a file and a ToolsVersion, return the path to that file in the MSBuild tools path for that ToolsVersion |
GetPathToDotNetFramework(TargetDotNetFrameworkVersion, DotNetFrameworkArchitecture) |
Get a fully qualified path to the framework's root directory. |
GetPathToDotNetFramework(TargetDotNetFrameworkVersion) |
Get a fully qualified path to the frameworks root directory. |
GetPathToDotNetFrameworkFile(String, TargetDotNetFrameworkVersion, DotNetFrameworkArchitecture) |
Get a fully qualified path to a file in the frameworks root directory for the specified architecture. |
GetPathToDotNetFrameworkFile(String, TargetDotNetFrameworkVersion) |
Get a fully qualified path to a file in the frameworks root directory. |
GetPathToDotNetFrameworkReferenceAssemblies(TargetDotNetFrameworkVersion) |
Returns the path to the reference assemblies location for the given framework version. |
GetPathToDotNetFrameworkSdk() |
Returns the path to the "bin" directory of the latest .NET Framework SDK. When targeting .NET 3.5 or above, looks in the locations associated with Visual Studio 2010. If you wish to target the .NET Framework SDK that ships with Visual Studio Dev11 or later, please use the override that specifies a VisualStudioVersion. |
GetPathToDotNetFrameworkSdk(TargetDotNetFrameworkVersion, VisualStudioVersion) |
Returns the path to the .NET Framework SDK. |
GetPathToDotNetFrameworkSdk(TargetDotNetFrameworkVersion) |
Returns the path to the "bin" directory of the .NET Framework SDK. When targeting .NET 3.5 or above, looks in the locations associated with Visual Studio 2010. If you wish to target the .NET Framework SDK that ships with Visual Studio Dev11 or later, please use the override that specifies a VisualStudioVersion. |
GetPathToDotNetFrameworkSdkFile(String, TargetDotNetFrameworkVersion, DotNetFrameworkArchitecture) |
Get a fully qualified path to a file in the .NET Framework SDK. Error if the .NET Framework SDK can't be found. |
GetPathToDotNetFrameworkSdkFile(String, TargetDotNetFrameworkVersion, VisualStudioVersion, DotNetFrameworkArchitecture) |
Get a fully qualified path to a file in the .NET Framework SDK. Error if the .NET Framework SDK can't be found. |
GetPathToDotNetFrameworkSdkFile(String, TargetDotNetFrameworkVersion, VisualStudioVersion) |
Get a fully qualified path to a file in the .NET Framework SDK. Error if the .NET Framework SDK can't be found. |
GetPathToDotNetFrameworkSdkFile(String, TargetDotNetFrameworkVersion) |
Get a fully qualified path to a file in the .NET Framework SDK. Error if the .NET Framework SDK can't be found. When targeting .NET 3.5 or above, looks in the locations associated with Visual Studio 2010. If you wish to target the .NET Framework SDK that ships with Visual Studio Dev11 or later, please use the override that specifies a VisualStudioVersion. |
GetPathToDotNetFrameworkSdkFile(String) |
Get a fully qualified path to a file in the latest .NET Framework SDK. Error if the .NET Framework SDK can't be found. When targeting .NET 3.5 or above, looks in the locations associated with Visual Studio 2010. If you wish to target the .NET Framework SDK that ships with Visual Studio Dev11 or later, please use the override that specifies a VisualStudioVersion. |
GetPathToReferenceAssemblies(FrameworkName) |
Returns the paths to the reference assemblies location for the given target framework. This method will assume the requested ReferenceAssemblyRoot path will be the ProgramFiles directory specified by Environment.SpecialFolder.ProgramFiles In additon when the .NETFramework or .NET Framework targetFrameworkIdentifiers are seen and targetFrameworkVersion is 2.0, 3.0, 3.5 or 4.0 we will return the correctly chained reference assembly paths for the legacy .net frameworks. This chaining will use the existing GetPathToDotNetFrameworkReferenceAssemblies to build up the list of reference assembly paths. |
GetPathToReferenceAssemblies(String, FrameworkName) |
Returns the paths to the reference assemblies location for the given framework version relative to a given targetFrameworkRoot. The method will not check to see if the path exists or not. |
GetPathToReferenceAssemblies(String, String, FrameworkName) |
Returns the paths to the reference assemblies location for the given framework version relative to a given targetFrameworkRoot. The method will not check to see if the path exists or not. |
GetPathToReferenceAssemblies(String, String, String, String, String) |
Returns the paths to the reference assemblies location for the given target framework. This method will assume the requested ReferenceAssemblyRoot path will be the ProgramFiles directory specified by Environment.SpecialFolder.ProgramFiles In addition when the .NETFramework or .NET Framework targetFrameworkIdentifiers are seen and targetFrameworkVersion is 2.0, 3.0, 3.5 or 4.0 we will return the correctly chained reference assembly paths for the legacy .net frameworks. This chaining will use the existing GetPathToDotNetFrameworkReferenceAssemblies to build up the list of reference assembly paths. |
GetPathToReferenceAssemblies(String, String, String, String) |
Returns the paths to the reference assemblies location for the given target framework. This method will assume the requested ReferenceAssemblyRoot path will be the ProgramFiles directory specified by Environment.SpecialFolder.ProgramFiles In additon when the .NETFramework or .NET Framework targetFrameworkIdentifiers are seen and targetFrameworkVersion is 2.0, 3.0, 3.5 or 4.0 we will return the correctly chained reference assembly paths for the legacy .net frameworks. This chaining will use the existing GetPathToDotNetFrameworkReferenceAssemblies to build up the list of reference assembly paths. |
GetPathToReferenceAssemblies(String, String, String) |
Returns the paths to the reference assemblies location for the given target framework. This method will assume the requested ReferenceAssemblyRoot path will be the ProgramFiles directory specified by Environment.SpecialFolder.ProgramFiles In additon when the .NETFramework or .NET Framework targetFrameworkIdentifiers are seen and targetFrameworkVersion is 2.0, 3.0, 3.5 or 4.0 we will return the correctly chained reference assembly paths for the legacy .net frameworks. This chaining will use the existing GetPathToDotNetFrameworkReferenceAssemblies to build up the list of reference assembly paths. |
GetPathToStandardLibraries(String, String, String, String, String, String) |
Returns the path to mscorlib and system.dll |
GetPathToStandardLibraries(String, String, String, String, String) |
Returns the path to mscorlib and system.dll |
GetPathToStandardLibraries(String, String, String, String) |
Returns the path to mscorlib and system.dll |
GetPathToStandardLibraries(String, String, String) |
Returns the path to the reference assemblies location for the given target framework's standard libraries (i.e. mscorlib). This method will assume the requested ReferenceAssemblyRoot path will be the ProgramFiles directory specified by Environment.SpecialFolder.ProgramFiles In additon when the .NETFramework or .NET Framework targetFrameworkIdentifiers are seen and targetFrameworkVersion is 2.0, 3.0, 3.5 or 4.0 we will return the correctly chained reference assembly paths for the legacy .net frameworks. This chaining will use the existing GetPathToDotNetFrameworkReferenceAssemblies to build up the list of reference assembly paths. |
GetPathToSystemFile(String) |
Get a fully qualified path to a file in the system directory (i.e. %SystemRoot%\System32) |
GetPathToWindowsSdk(TargetDotNetFrameworkVersion, VisualStudioVersion) |
Obsolete.
Returns the path to the Windows SDK for the desired .NET Framework and Visual Studio version. Note that this is only supported for a targeted .NET Framework version of 4.5 and above. |
GetPathToWindowsSdkFile(String, TargetDotNetFrameworkVersion, VisualStudioVersion, DotNetFrameworkArchitecture) |
Obsolete.
Returns the path to a file in the Windows SDK for the desired .NET Framework and Visual Studio version and the desired architecture. Note that this is only supported for a targeted .NET Framework version of 4.5 and above. |
GetPathToWindowsSdkFile(String, TargetDotNetFrameworkVersion, VisualStudioVersion) |
Obsolete.
Returns the path to a file in the Windows SDK for the desired .NET Framework and Visual Studio version. Note that this is only supported for a targeted .NET Framework version of 4.5 and above. |
GetPlatformExtensionSDKLocation(String, String, String, String, String, String) |
Given an SDKName, targetPlatformIdentifier and TargetPlatformVersion search the default sdk locations for the passed in sdk name. The format of the sdk moniker is SDKName, Version=X.X |
GetPlatformExtensionSDKLocation(String, String, String, String, String) |
Given an SDKName, targetPlatformIdentifier and TargetPlatformVersion search the default sdk locations for the passed in sdk name. The format of the sdk moniker is SDKName, Version=X.X |
GetPlatformExtensionSDKLocation(String, String, String) |
Given an SDK moniker and the targeted platform get the path to the SDK root if it exists. |
GetPlatformExtensionSDKLocation(String, String, Version, String[], String) |
Given an SDKName, targetPlatformIdentifier and TargetPlatformVersion search the default sdk locations for the passed in sdk name. The format of the sdk moniker is SDKName, Version=X.X |
GetPlatformExtensionSDKLocation(String, String, Version, String[], String[], String) |
Given an SDKName, targetPlatformIdentifier and TargetPlatformVersion search the default sdk locations for the passed in sdk name. The format of the sdk moniker is SDKName, Version=X.X |
GetPlatformExtensionSDKLocation(String, String, Version) |
Given an SDKName, targetPlatformIdentifier and TargetPlatformVersion search the default sdk locations for the passed in sdk name. The format of the sdk moniker is SDKName, Version=X.X |
GetPlatformExtensionSDKLocations(String, Version) |
Get a list of SDK's installed on the machine for a given target platform |
GetPlatformExtensionSDKLocations(String[], String, String, Version) |
Get a list of SDK's installed on the machine for a given target platform |
GetPlatformExtensionSDKLocations(String[], String[], String, String, Version) |
Get a list of SDK's installed on the machine for a given target platform |
GetPlatformExtensionSDKLocationsAndVersions(String, Version) |
Get a list of SDK's installed on the machine for a given target platform |
GetPlatformExtensionSDKLocationsAndVersions(String[], String, String, Version) |
Set of installed SDKs and their location and platform versions |
GetPlatformExtensionSDKLocationsAndVersions(String[], String[], String, String, Version) |
Set of installed SDKs and their location and platform versions |
GetPlatformOrFrameworkExtensionSdkReferences(String, String, String, String, String, String, String, String) |
Gathers the specified extension SDK references for the given target SDK |
GetPlatformOrFrameworkExtensionSdkReferences(String, String, String, String, String, String) |
Gathers the specified extension SDK references for the given target SDK |
GetPlatformSDKDisplayName(String, String, String, String) |
Given a target platform identifier and version, get the display name for that platform SDK. |
GetPlatformSDKDisplayName(String, String) |
Given a target platform identifier and version, get the display name for that platform SDK. |
GetPlatformSDKLocation(String, String, String, String) |
Given a target platform identifier and a target platform version search the default sdk locations for the platform sdk for the target platform. |
GetPlatformSDKLocation(String, String) |
Given a target platform identifier and a target platform version search the default sdk locations for the platform sdk for the target platform. |
GetPlatformSDKLocation(String, Version, String[], String) |
Given a target platform identifier and a target platform version search the default sdk locations for the platform sdk for the target platform. |
GetPlatformSDKLocation(String, Version) |
Given a target platform identifier and a target platform version search the default sdk locations for the platform sdk for the target platform. |
GetPlatformSDKPropsFileLocation(String, String, String, String, String, String, String) |
Get the location of the target platform SDK props file for a given {SDKI, SDKV, TPI, TPMinV, TPV} combination. |
GetPlatformSDKPropsFileLocation(String, String, String, String, String) |
Get the location of the target platform SDK props file for a given {SDKI, SDKV, TPI, TPMinV, TPV} combination. |
GetPlatformsForSDK(String, Version, String[], String) |
Given an SDK identifier and an SDK version, return a list of installed platforms. |
GetPlatformsForSDK(String, Version) |
Given an SDK identifier and an SDK version, return a list of installed platforms. |
GetProgramFilesReferenceAssemblyRoot() |
Will return the root location for the reference assembly directory under the program files directory. |
GetSDKContentFolderPath(String, String, String, String, String, String, String) |
Return the versioned/unversioned SDK content folder path |
GetSDKDesignTimeFolders(String, String, String) |
Get the list of SDK folders which contains the DesignTime files for the sdk at the sdkRoot provided in the order in which they should be searched for references. |
GetSDKDesignTimeFolders(String) |
Get the list of SDK folders which contains the designtime files for the sdk at the sdkRoot provided in the order in which they should be searched for references. |
GetSDKRedistFolders(String, String, String) |
Get the list of SDK folders which contains the redist files for the sdk at the sdkRoot provided in the order in which they should be searched for references. |
GetSDKRedistFolders(String) |
Get the list of SDK folders which contains the redist files for the sdk at the sdkRoot provided in the order in which they should be searched for references. |
GetSDKReferenceFolders(String, String, String) |
Get the list of SDK folders which contains the references for the sdk at the sdkRoot provided in the order in which they should be searched for references. |
GetSDKReferenceFolders(String) |
Get the list of SDK folders which contains the references for the sdk at the sdkRoot provided in the order in which they should be searched for references. |
GetSupportedTargetFrameworks() |
Gets a IList of supported target framework monikers. |
GetTargetPlatformReferences(String, String, String, String, String, String, String) |
Gathers the set of platform winmds for a particular {SDKI, SDKV, TPI, TPMinV, TPV} combination |
GetTargetPlatformReferences(String, String, String, String, String) |
Gathers the set of platform winmds for a particular {SDKI, SDKV, TPI, TPMinV, TPV} combination |
GetTargetPlatformSdks() |
Get a list target platform sdks on the machine. |
GetTargetPlatformSdks(String[], String) |
Get a list target platform sdks on the machine. |
HighestVersionOfTargetFrameworkIdentifier(String, String) |
This method will return the highest version of a target framework moniker based on the identifier. This method will only find full frameworks, this means no profiles will be returned. |