public void ConvertToString()
        {
            AssemblyIdentity a = new AssemblyIdentity("MyAssembly", "1.0.0.0");

            Assert.AreEqual("MyAssembly, Version=1.0.0.0", a.ToString("D"));
            Assert.AreEqual("MyAssembly_1.0.0.0", a.ToString("N"));
            Assert.AreEqual("MyAssembly, Version=1.0.0.0, Culture=, PublicKeyToken=, ProcessorArchitecture=", a.ToString("P"));
        }
 public override PortableExecutableReference ResolveMissingAssembly(MetadataReference definition, AssemblyIdentity referenceIdentity)
 {
     if (_cache == null)
     {
         return(_innerReferenceResolver.ResolveMissingAssembly(definition, referenceIdentity));
     }
     return(_cache.GetOrAdd(referenceIdentity.ToString(),
                            _ => ImmutableArray.Create(_innerReferenceResolver.ResolveMissingAssembly(definition, referenceIdentity))).FirstOrDefault());
 }
Beispiel #3
0
            public AssemblyIdentity ApplyBindingRedirects(AssemblyIdentity originalIdentity)
            {
                var redirectedAssemblyName = AppDomain.CurrentDomain.ApplyPolicy(originalIdentity.ToString());

                if (AssemblyIdentity.TryParseDisplayName(redirectedAssemblyName, out var redirectedAssemblyIdentity))
                {
                    return(redirectedAssemblyIdentity);
                }

                return(originalIdentity);
            }
Beispiel #4
0
        public void StringRepresentation()
        {
            var name = "path/to/file";

            var identity = new AssemblyIdentity(name);

            Assert.AreEqual(identity.ToString(), name);

            identity = identity.WithAnnotation(
                AssemblyIdentity.IsRetargetableKey,
                true);
            Assert.AreEqual(
                identity.ToString(),
                name + " { isRetargetable: 'True' }");

            identity = identity.WithAnnotation(
                AssemblyIdentity.VersionAnnotationKey,
                new Version(1, 2, 3, 4));
            Assert.AreEqual(
                identity.ToString(),
                name + " { isRetargetable: 'True', version: '1.2.3.4' }");
        }
Beispiel #5
0
        public override PortableExecutableReference ResolveMissingAssembly(
            MetadataReference definition, AssemblyIdentity referenceIdentity)
        {
            if (resolvedReferences.TryGetValue(referenceIdentity.Name, out var resolvedReference))
            {
                return(resolvedReference);
            }

            resolvedReference = GetPEReference(dependencyResolver.ResolveWithoutReferences(
                                                   new AssemblyName(referenceIdentity.ToString())));
            resolvedReferences = resolvedReferences.Add(referenceIdentity.Name, resolvedReference);
            return(resolvedReference);
        }
Beispiel #6
0
    private static Guid ComputeFingerprint(AssemblyIdentity identity, List <ApiEntry> roots)
    {
        using var stream = new MemoryStream();
        using var writer = new StreamWriter(stream);

        writer.WriteLine(identity.ToString());
        WriteDeclarations(writer, roots);

        writer.Flush();

        stream.Position = 0;

        using var md5 = MD5.Create();
        var hashBytes = md5.ComputeHash(stream);

        return(new Guid(hashBytes));
    private static Guid ComputeFingerprint(AssemblyIdentity identity, List <ApiEntry> roots)
    {
        using var stream = new MemoryStream();
        using var writer = new StreamWriter(stream);

        writer.WriteLine(identity.ToString());
        WriteDeclarations(writer, roots);

        writer.Flush();

        stream.Position = 0;

#pragma warning disable CA5351 // Do Not Use Broken Cryptographic Algorithms
        using var md5 = MD5.Create();
#pragma warning restore CA5351 // Do Not Use Broken Cryptographic Algorithms
        var hashBytes = md5.ComputeHash(stream);
        return(new Guid(hashBytes));
Beispiel #8
0
        // TODO: Something similar for ResolvingModuleReference?
        public override void ResolvingAssemblyReference(IUnit referringUnit, AssemblyIdentity referencedAssembly)
        {
            List <String> paths = new List <string>();

            paths.Add(Path.GetDirectoryName(referringUnit.Location));
            paths.AddRange(_assemblyPaths);

            foreach (String assemblyFile in _referencedAssemblies)
            {
                if (Path.GetFileNameWithoutExtension(assemblyFile).Equals(referencedAssembly.Name.Value, StringComparison.OrdinalIgnoreCase))
                {
                    if (TryLoadAssembly(referringUnit, referencedAssembly, assemblyFile))
                    {
                        return;
                    }
                }
            }

            foreach (String path in paths)
            {
                String file = Path.Combine(path, referencedAssembly.Name.Value + ".dll");
                if (TryLoadAssembly(referringUnit, referencedAssembly, file))
                {
                    return;
                }

                file = Path.Combine(path, referencedAssembly.Name.Value + ".exe");
                if (TryLoadAssembly(referringUnit, referencedAssembly, file))
                {
                    return;
                }

                file = Path.Combine(path, referencedAssembly.Name.Value + ".winmd");
                if (TryLoadAssembly(referringUnit, referencedAssembly, file))
                {
                    return;
                }
            }

            throw new Exception(String.Format("Cannot find: {0}. Check assembly dependency paths.", referencedAssembly.ToString()));
        }