private static (AssemblyInformation assembly, Assembly?msAssembly) CreateManagedAssemblyInformation(MetadataLoadContext context, AssemblyName assemblyName, string baseDirectory, string extension = "dll")
        {
            var assemblyPath = FilePathProvider.GetAssemblyPath($"{assemblyName.Name}.{extension}", baseDirectory);

            Assembly?assembly = null;

            try
            {
                assembly = File.Exists(assemblyPath) ? context.LoadFromAssemblyPath(assemblyPath ?? string.Empty) : context.LoadFromAssemblyName(assemblyName);
            }
            catch
            {
                // In this case, assembly is not found
            }

            var assemblyShortName = assemblyName.Name ?? string.Empty;
            var assemblyVersion   = assemblyName.Version?.ToString() ?? string.Empty;

            var info = new AssemblyInformation(assemblyShortName, assembly?.GetName().Version?.ToString() ?? assemblyVersion, assemblyPath)
            {
                IsLocalAssembly = assemblyPath != null || assembly == null,
                AssemblyName    = assemblyName.FullName,
                IsResolved      = assembly != null
            };

            info.EnhancePropertiesWithFile();
            info.EnhanceProperties(assembly?.GetModules().First());

            return(info, assembly);
        }
示例#2
0
        private static (AssemblyInformation assembly, AssemblyDefinition?monoAssembly) CreateManagedAssemblyInformation(AssemblyNameReference assemblyName, string?baseDirectory, string extension = "dll")
        {
            var assemblyPath = FilePathProvider.GetAssemblyPath($"{assemblyName.Name}.{extension}", baseDirectory);

            AssemblyDefinition?assembly = null;

            try
            {
                using var resolver = new DefaultAssemblyResolver();
                assembly           = assemblyPath != null?AssemblyDefinition.ReadAssembly(assemblyPath) : resolver.Resolve(assemblyName);
            }
            catch
            {
                // do nothing, assembly is not found
            }

            var info = new AssemblyInformation(assemblyName.Name, assembly?.Name.Version.ToString() ?? assemblyName.Version.ToString(), assemblyPath)
            {
                IsLocalAssembly = assemblyPath != null || assembly == null,
                AssemblyName    = assembly?.FullName ?? assemblyName.FullName,
                IsResolved      = assembly != null,
                HasEntryPoint   = assembly?.EntryPoint != null
            };

            info.EnhancePropertiesWithFile();
            info.EnhanceProperties(assembly);

            return(info, assembly);
        }
        private static AssemblyInformation CreateNativeAssemblyInformation(string fileName, string?filePath, bool isSystem)
        {
            var info = new AssemblyInformation(fileName, null, filePath)
            {
                IsNative        = true,
                IsLocalAssembly = !isSystem,
                IsResolved      = isSystem || filePath != null
            };

            info.EnhancePropertiesWithFile();

            return(info);
        }