Exemplo n.º 1
0
        static IMetadata P_Resolve(this IMetadataReference reference, IMetadata @base)
        {
            @base.EnsureNotNull(nameof(@base));
            //
            IMetadata result;

            if (reference == null)
            {
                result = null;
                @base.EnsureNotDisposeState();
            }
            else
            {
                var resolver = reference.GetResolver();
                if (resolver == null)
                {
                    throw new MetadataReferenceException(reference, @base, FormatXResource(typeof(MetadataReference), "NoPreferredResolver"));
                }
                try {
                    IMetadata resolvedMetadata;
                    if (resolver.Resolve(@base, reference, out resolvedMetadata))
                    {
                        result = resolvedMetadata;
                    }
                    else
                    {
                        throw
                            new MetadataReferenceNotResolvedException(reference, @base);
                    }
                    // TODO: Validate compliance.
                    //
                }
                catch (Exception firstException) when(!(firstException is MetadataReferenceException))
                {
                    throw new MetadataReferenceNotResolvedException(reference: reference, @base: @base, innerException: firstException);
                }
            }
            return(result);
        }