File: Delegate.cs
Web Access
Project: ..\..\..\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 System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Versioning;
using Microsoft.Build.Shared;
using Microsoft.Build.Tasks.AssemblyDependency;
 
#nullable disable
 
namespace Microsoft.Build.Tasks
{
    /// <summary>
    /// File.GetAttributes delegate.
    /// </summary>
    /// <param name="path">The path get attributes for.</param>
    internal delegate FileAttributes GetAttributes(string path);
 
    /// <summary>
    /// File SetAttributes delegate.
    /// </summary>
    /// <param name="path">The path to set attributes for.</param>
    /// <param name="attributes">The actual file attributes.</param>
    internal delegate void SetAttributes(string path, FileAttributes attributes);
 
    /// <summary>
    /// File SetLastAccessTime delegate.
    /// </summary>
    internal delegate void SetLastAccessTime(string path, DateTime timestamp);
 
    /// <summary>
    /// File SetLastWriteTime delegate.
    /// </summary>
    internal delegate void SetLastWriteTime(string path, DateTime timestamp);
 
    /// <summary>
    /// GetDirectories delegate.
    /// </summary>
    /// <param name="path">The path to get directories for.</param>
    /// <param name="pattern">The pattern to search for.</param>
    /// <returns>An array of directories.</returns>
    internal delegate string[] GetDirectories(string path, string pattern);
 
    /// <summary>
    /// CopyFile delegate
    /// </summary>
    /// <param name="source">Source file</param>
    /// <param name="destination">Destination file</param>
    internal delegate bool CopyFile(string source, string destination);
 
    /// <summary>
    /// GetAssemblyName delegate
    /// </summary>
    /// <param name="path">The path to the file</param>
    /// <returns>The assembly name.</returns>
    internal delegate AssemblyNameExtension GetAssemblyName(string path);
 
    /// <summary>
    /// GetAssemblyRuntimeVersion delegate to get the clr runtime version of a file.
    /// </summary>
    /// <param name="path">The path to the file</param>
    /// <returns>The clr runtime version for the file</returns>
    internal delegate string GetAssemblyRuntimeVersion(string path);
 
    /// <summary>
    /// GetGacEnumerator delegate to get the enumerator which will enumerate over the GAC
    /// </summary>
    /// <param name="strongName">StrongName to get an enumerator for</param>
    /// <returns>The enumerator for the gac</returns>
    internal delegate IEnumerable<AssemblyNameExtension> GetGacEnumerator(string strongName);
 
    /// <summary>
    /// GetPathFromFusionName delegate to get path to a file based on the fusion name
    /// </summary>
    /// <param name="strongName">StrongName to get a path for</param>
    /// <returns>The path to the assembly</returns>
    internal delegate string GetPathFromFusionName(string strongName);
 
    /// <summary>
    /// Delegate. Given an assembly name, crack it open and retrieve the list of dependent
    /// assemblies and  the list of scatter files.
    /// </summary>
    /// <param name="path">Path to the assembly.</param>
    /// <param name="assemblyMetadataCache">Assembly metadata cache.</param>
    /// <param name="dependencies">Receives the list of dependencies.</param>
    /// <param name="scatterFiles">Receives the list of associated scatter files.</param>
    /// <param name="frameworkNameAttribute">The framework name</param>
    internal delegate void GetAssemblyMetadata(
        string path,
        ConcurrentDictionary<string, AssemblyMetadata> assemblyMetadataCache,
        out AssemblyNameExtension[] dependencies,
        out string[] scatterFiles,
        out FrameworkName frameworkNameAttribute);
 
    /// <summary>
    /// Delegate to take in a dll path and read the machine type from the PEHeader
    /// </summary>
    internal delegate UInt16 ReadMachineTypeFromPEHeader(string dllPath);
 
    /// <summary>
    /// Delegate to get the path to an assembly in the GAC.
    /// </summary>
    internal delegate string GetAssemblyPathInGac(AssemblyNameExtension assemblyName, System.Reflection.ProcessorArchitecture targetProcessorArchitecture, GetAssemblyRuntimeVersion getRuntimeVersion, Version targetedRuntimeVersion, FileExists fileExists, bool fullFusionName, bool specificVersion);
 
    /// <summary>
    /// Determines if a assembly is an winmd file
    /// </summary>
    internal delegate bool IsWinMDFile(string fullpath, GetAssemblyRuntimeVersion getAssemblyRuntimeVersion, FileExists fileExists, out string imageRuntimeVersion, out bool isManagedWinmd);
 
    /// <summary>
    /// CreateFileString delegate. Creates a stream on top of a file.
    /// </summary>
    /// <param name="path">Path to the file</param>
    /// <param name="mode">File mode</param>
    /// <param name="access">Access type</param>
    /// <returns>The Stream</returns>
    internal delegate Stream CreateFileStream(string path, FileMode mode, FileAccess access);
 
    /// <summary>
    /// Delegate for System.IO.File.GetLastWriteTime
    /// </summary>
    /// <param name="path">The file name</param>
    /// <returns>The last write time.</returns>
    internal delegate DateTime GetLastWriteTime(string path);
}