public void AddMetadataReference(IMetadataReference metadataReference) { if (MetadataReferences.Any(x => x.Name == metadataReference.Name)) return; MetadataReferences.Add(metadataReference); }
public static TMetadata Resolve <TMetadata>(this IMetadataReference <TMetadata> reference, IMetadata @base) where TMetadata : class, IMetadata { @base.EnsureNotNull(nameof(@base)); // var resolvedMetadata = P_Resolve(reference: reference, @base: @base); if (resolvedMetadata == null) { return(null); } else { var result = resolvedMetadata as TMetadata; if (result == null) { throw new MetadataNotCompliantReferenceException(reference, resolvedMetadata); } else { return(result); } } }
private MetadataReference ConvertMetadataReference(IMetadataReference metadataReference) { var embeddedReference = metadataReference as IMetadataEmbeddedReference; if (embeddedReference != null) { return(MetadataReference.CreateFromImage(embeddedReference.Contents)); } var fileMetadataReference = metadataReference as IMetadataFileReference; if (fileMetadataReference != null) { return(MetadataReference.CreateFromFile(fileMetadataReference.Path)); } var projectReference = metadataReference as IMetadataProjectReference; if (projectReference != null) { using (var ms = new MemoryStream()) { projectReference.EmitReferenceAssembly(ms); return(MetadataReference.CreateFromImage(ms.ToArray())); } } throw new NotSupportedException(); }
public MetadataReferenceException(IMetadataReference reference, IMetadata @base, string message, Exception innerException) : base(P_ConstructMessage(reference, @base, message, innerException), innerException) { _reference = reference; _referenceAsString = reference?.ToString(); _base = @base; _baseAsString = @base?.ToString(); }
public static void EnsureReachable(this IMetadataReference reference, IMetadata @base) { if (!(reference is null)) { // TODO: Implement logic without factual resolution. // Resolve(reference, @base); } }
public void AddMetadataReference(IMetadataReference metadataReference) { if (MetadataReferences.Any(x => x.Name == metadataReference.Name)) { return; } MetadataReferences.Add(metadataReference); }
public LibraryExport(IMetadataReference metadataReference) { MetadataReferences = new List<IMetadataReference> { metadataReference }; SourceReferences = new List<ISourceReference>(); }
public LibraryExport(IMetadataReference metadataReference) { MetadataReferences = new List <IMetadataReference> { metadataReference }; SourceReferences = new List <ISourceReference>(); }
static string P_ConstructMessage(IMetadataReference reference, IMetadata @base, string message, Exception innerException) { if (!(string.IsNullOrEmpty(message) && reference == null && @base == null)) { if (innerException == null) { return(FormatXResource(typeof(MetadataReferenceException), "Detailed", message, reference.FmtStr().G(), @base.FmtStr().G())); } return(FormatXResource(typeof(MetadataReferenceException), "Detailed/InnerException", message, reference.FmtStr().G(), @base.FmtStr().G())); } else if (innerException == null) { return(FormatXResource(typeof(MetadataReferenceException), subpath: null)); } return(FormatXResource(typeof(MetadataReferenceException), "InnerException")); }
/// <summary> /// Converts an <see cref="IMetadataReference"/> to a <see cref="MetadataReference"/> instance. /// </summary> /// <param name="metadataReference">The <see cref="IMetadataReference"/> to convert.</param> /// <param name="assemblyMetadataFactory">Factory invoked to get instances of <see cref="AssemblyMetadata"/>.</param> /// <returns>The converted <see cref="MetadataReference"/>.</returns> public static MetadataReference ConvertMetadataReference( this IMetadataReference metadataReference, Func <IMetadataFileReference, AssemblyMetadata> assemblyMetadataFactory) { var roslynReference = metadataReference as IRoslynMetadataReference; if (roslynReference != null) { return(roslynReference.MetadataReference); } var embeddedReference = metadataReference as IMetadataEmbeddedReference; if (embeddedReference != null) { return(MetadataReference.CreateFromImage(embeddedReference.Contents)); } var fileMetadataReference = metadataReference as IMetadataFileReference; if (fileMetadataReference != null) { var metadata = assemblyMetadataFactory(fileMetadataReference); return(metadata.GetReference(filePath: fileMetadataReference.Path)); } var projectReference = metadataReference as IMetadataProjectReference; if (projectReference != null) { using (var ms = new MemoryStream()) { projectReference.EmitReferenceAssembly(ms); return(MetadataReference.CreateFromStream(ms, filePath: projectReference.ProjectPath)); } } throw new NotSupportedException($"Unsupported type '{metadataReference.GetType()}'."); }
private MetadataReference ConvertMetadataReference(IMetadataReference metadataReference) { var roslynReference = metadataReference as IRoslynMetadataReference; if (roslynReference != null) { return(roslynReference.MetadataReference); } var embeddedReference = metadataReference as IMetadataEmbeddedReference; if (embeddedReference != null) { return(new MetadataImageReference(embeddedReference.Contents)); } var fileMetadataReference = metadataReference as IMetadataFileReference; if (fileMetadataReference != null) { return(CreateMetadataFileReference(fileMetadataReference.Path)); } var projectReference = metadataReference as IMetadataProjectReference; if (projectReference != null) { using (var ms = new MemoryStream()) { projectReference.EmitReferenceAssembly(ms); ms.Seek(0, SeekOrigin.Begin); return(new MetadataImageReference(ms)); } } throw new NotSupportedException(); }
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); }
private MetadataReference ConvertMetadataReference(IMetadataReference metadataReference) { var roslynReference = metadataReference as IRoslynMetadataReference; if (roslynReference != null) { return roslynReference.MetadataReference; } var embeddedReference = metadataReference as IMetadataEmbeddedReference; if (embeddedReference != null) { return MetadataReference.CreateFromImage(embeddedReference.Contents); } var fileMetadataReference = metadataReference as IMetadataFileReference; if (fileMetadataReference != null) { return CreateMetadataFileReference(fileMetadataReference.Path); } var projectReference = metadataReference as IMetadataProjectReference; if (projectReference != null) { using (var ms = new MemoryStream()) { projectReference.EmitReferenceAssembly(ms); return MetadataReference.CreateFromImage(ms.ToArray()); } } throw new NotSupportedException(); }
public void AddMetadataReference(string name, IMetadataReference metadataReference) { MetadataReferences[name] = metadataReference; }
public LibraryExport(IMetadataReference metadataReference) : this(new List <IMetadataReference>() { metadataReference }) { }
public MetadataReferenceNotResolvedException(IMetadataReference reference, IMetadata @base, Exception innerException) : this(reference, @base, (string)null, innerException) { }
public bool Resolve(IMetadata @base, IMetadataReference reference, out IMetadata metadata) { @base.EnsureNotNull(nameof(@base)); var pathNameReference = reference .EnsureNotNull(nameof(reference)) .EnsureOfType <IMetadataReference, IMetadataPathNameReference>() .Value; // var requiredMetadataType = pathNameReference.TargetMetadataType; var name = pathNameReference.Name; var firstNameComponent = true; var currentSearchPlace = @base; var locMetadata = default(IMetadata); foreach (var currentComponentName in name.Components) { if (firstNameComponent) { locMetadata = currentSearchPlace .Sequence() .Concat(currentSearchPlace.Parent.Sequence()) .Concat(currentSearchPlace.Siblings) .Concat(currentSearchPlace.Children) .Concat(currentSearchPlace.Ancestors.Skip(1)) .Where(i => MetadataName.Equals(i?.Name, currentComponentName)) .FirstOrDefault(); firstNameComponent = false; } else { locMetadata = currentSearchPlace .Children .Where(i => MetadataName.Equals(i.Name, currentComponentName)) .FirstOrDefault(); } if (locMetadata == null) { break; } else { currentSearchPlace = locMetadata; } } if (locMetadata == null) { metadata = null; return(false); } else if (requiredMetadataType.IsAssignableFrom(locMetadata.GetType())) { metadata = locMetadata; return(true); } else { throw new MetadataNotCompliantReferenceException(reference, locMetadata); } }
public MetadataReferenceNotResolvedException(IMetadataReference reference, IMetadata @base, string message, Exception innerException) : base(reference, @base, string.IsNullOrEmpty(message) ? FormatXResource(typeof(MetadataReferenceNotResolvedException), null) : message, innerException) { this.SetErrorCode(MetadataErrorCodes.Reference.NotResolved); }
public MetadataReferenceNotResolvedException(IMetadataReference reference, IMetadata @base) : this(reference, @base, (string)null, (Exception)null) { }
public static IMetadata Resolve(this IMetadataReference reference, IMetadata @base) => P_Resolve(reference, @base);
public LibraryExport(IMetadataReference metadataReference) : this(new List<IMetadataReference>() { metadataReference }) { }
public MetadataNotCompliantReferenceException(IMetadataReference reference, IMetadata metadata) : this(reference, metadata, null, null) { }
public MetadataNotCompliantReferenceException(IMetadataReference reference, IMetadata metadata, string message, Exception innerException) : base(reference, null, string.IsNullOrEmpty(message) ? xres.FormatXResource(typeof(MetadataNotCompliantReferenceException), null, metadata.Fluent().NullCond(i => i.GetType()), reference.Fluent().NullCond(i => i.TargetMetadataType)) : xres.FormatXResource(typeof(MetadataNotCompliantReferenceException), "WithMessage", metadata.Fluent().NullCond(i => i.GetType()), reference.Fluent().NullCond(i => i.TargetMetadataType), message), innerException) { _metadata = metadata; _metadataAsString = metadata?.ToString(); }
public MetadataReferenceException(IMetadataReference reference, IMetadata @base, string message) : this(reference, @base, message, null) { }