/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/Shared/GlobalAssemblyCacheHelpers/GlobalAssemblyCache.cs
95 строк
5 KB
David Barbet
Use no-op global assembly cache helper when running under .net core
13 сен 2023, 04:13
13 сен 2023, 04:13
2ddeb6d
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Globalization; using System.Reflection; namespace Microsoft.CodeAnalysis { /// <summary> /// Provides APIs to enumerate and look up assemblies stored in the Global Assembly Cache. /// </summary> internal abstract class GlobalAssemblyCache { internal static readonly GlobalAssemblyCache Instance = CreateInstance(); private static GlobalAssemblyCache CreateInstance() { if (Type.GetType("Mono.Runtime") != null) { return new MonoGlobalAssemblyCache(); } else { return System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription.Contains(".NET Framework") ? new ClrGlobalAssemblyCache() : new DotNetCoreGlobalAssemblyCache(); } } /// <summary> /// Represents the current Processor architecture. /// </summary> public static readonly ImmutableArray<ProcessorArchitecture> CurrentArchitectures = (IntPtr.Size == 4) ? ImmutableArray.Create(ProcessorArchitecture.None, ProcessorArchitecture.MSIL, ProcessorArchitecture.X86) : ImmutableArray.Create(ProcessorArchitecture.None, ProcessorArchitecture.MSIL, ProcessorArchitecture.Amd64); /// <summary> /// Enumerates assemblies in the GAC returning those that match given partial name and /// architecture. /// </summary> /// <param name="partialName">Optional partial name.</param> /// <param name="architectureFilter">Optional architecture filter.</param> public abstract IEnumerable<AssemblyIdentity> GetAssemblyIdentities(AssemblyName partialName, ImmutableArray<ProcessorArchitecture> architectureFilter = default); /// <summary> /// Enumerates assemblies in the GAC returning those that match given partial name and /// architecture. /// </summary> /// <param name="partialName">The optional partial name.</param> /// <param name="architectureFilter">The optional architecture filter.</param> public abstract IEnumerable<AssemblyIdentity> GetAssemblyIdentities(string? partialName = null, ImmutableArray<ProcessorArchitecture> architectureFilter = default); /// <summary> /// Enumerates assemblies in the GAC returning their simple names. /// </summary> /// <param name="architectureFilter">Optional architecture filter.</param> /// <returns>Unique simple names of GAC assemblies.</returns> public abstract IEnumerable<string> GetAssemblySimpleNames(ImmutableArray<ProcessorArchitecture> architectureFilter = default); /// <summary> /// Looks up specified partial assembly name in the GAC and returns the best matching <see cref="AssemblyIdentity"/>. /// </summary> /// <param name="displayName">The display name of an assembly</param> /// <param name="architectureFilter">The optional processor architecture</param> /// <param name="preferredCulture">The optional preferred culture information</param> /// <returns>An assembly identity or null, if <paramref name="displayName"/> can't be resolved.</returns> /// <exception cref="ArgumentNullException"><paramref name="displayName"/> is null.</exception> public AssemblyIdentity? ResolvePartialName( string displayName, ImmutableArray<ProcessorArchitecture> architectureFilter = default, CultureInfo? preferredCulture = null) { return ResolvePartialName(displayName, out _, architectureFilter, preferredCulture); } /// <summary> /// Looks up specified partial assembly name in the GAC and returns the best matching <see cref="AssemblyIdentity"/>. /// </summary> /// <param name="displayName">The display name of an assembly</param> /// <param name="location">Full path name of the resolved assembly</param> /// <param name="architectureFilter">The optional processor architecture</param> /// <param name="preferredCulture">The optional preferred culture information</param> /// <returns>An assembly identity or null, if <paramref name="displayName"/> can't be resolved.</returns> /// <exception cref="ArgumentNullException"><paramref name="displayName"/> is null.</exception> public abstract AssemblyIdentity? ResolvePartialName( string displayName, out string? location, ImmutableArray<ProcessorArchitecture> architectureFilter = default, CultureInfo? preferredCulture = null); } }