| File: AssemblyDependency\RawFilenameResolver.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 System.Collections.Generic; using System.Reflection; using Microsoft.Build.Framework; using Microsoft.Build.Shared; #nullable disable namespace Microsoft.Build.Tasks { /// <summary> /// Resolve searchpath type {RawFileName} /// </summary> internal class RawFilenameResolver : Resolver { /// <summary> /// Construct. /// </summary> public RawFilenameResolver(string searchPathElement, GetAssemblyName getAssemblyName, FileExists fileExists, GetAssemblyRuntimeVersion getRuntimeVersion, Version targetedRuntimeVesion, TaskEnvironment taskEnvironment) : base(searchPathElement, getAssemblyName, fileExists, getRuntimeVersion, targetedRuntimeVesion, ProcessorArchitecture.None, false, taskEnvironment) { } /// <inheritdoc/> public override bool Resolve( AssemblyNameExtension assemblyName, string sdkName, string rawFileNameCandidate, bool isPrimaryProjectReference, bool isImmutableFrameworkReference, bool wantSpecificVersion, string[] executableExtensions, string hintPath, string assemblyFolderKey, List<ResolutionSearchLocation> assembliesConsideredAndRejected, out string foundPath, out bool userRequestedSpecificFile) { foundPath = null; userRequestedSpecificFile = false; if (rawFileNameCandidate is not null) { // For empty input, keep the empty string as-is to preserve the pre-MT diagnostic: // fileExists("") returns false and the entry is added to assembliesConsideredAndRejected. // For non-empty input, absolutize via TaskEnvironment so resolution targets the project // directory rather than the process CWD (which is no longer per-project under MT). string fullRawFileName = rawFileNameCandidate.Length == 0 ? rawFileNameCandidate : taskEnvironment.GetAbsolutePath(rawFileNameCandidate).Value; if (isImmutableFrameworkReference || fileExists(fullRawFileName)) { userRequestedSpecificFile = true; foundPath = fullRawFileName; return true; } if (assembliesConsideredAndRejected != null) { var considered = new ResolutionSearchLocation { FileNameAttempted = fullRawFileName, SearchPath = searchPathElement, Reason = NoMatchReason.NotAFileNameOnDisk }; assembliesConsideredAndRejected.Add(considered); } } return false; } } }