/// <summary> /// This constructor expects to get the paths that have potential to turn into multiple /// artifacts like /// /// res://*/foo.csdl -- could be multiple assemblies /// res://MyAssembly/ -- could be multiple artifacts in the one assembly /// /// </summary> /// <param name="path">The path to the (collection of) resources</param> /// <param name="uriRegistry">The global registry of URIs</param> /// <param name="resolveAssembly"></param> internal MetadataArtifactLoaderCompositeResource(string originalPath, string assemblyName, string resourceName, ICollection<string> uriRegistry, MetadataArtifactAssemblyResolver resolver) { Debug.Assert(resolver != null); _originalPath = originalPath; _children = LoadResources(assemblyName, resourceName, uriRegistry, resolver).AsReadOnly(); }
/// <summary> /// Load all resources from a specific assembly. /// </summary> /// <param name="fullName">The full name identifying the assembly to /// load resources from</param> /// <param name="uriRegistry">The global registry of URIs</param> /// <param name="resolveAssembly">delegate for resolve the assembly</param> private static Assembly ResolveAssemblyName(string assemblyName, MetadataArtifactAssemblyResolver resolver) { Debug.Assert(resolver != null); AssemblyName referenceName = new AssemblyName(assemblyName); Assembly assembly; if (!resolver.TryResolveAssemblyReference(referenceName, out assembly)) { throw new FileNotFoundException(Strings.UnableToResolveAssembly(assemblyName)); } return(assembly); }
[ResourceConsumption(ResourceScope.Machine)] //For CheckArtifactExtension method call. But the path is not created in this method. internal static MetadataArtifactLoader Create( string path, ExtensionCheck extensionCheck, string validExtension, ICollection<string> uriRegistry, MetadataArtifactAssemblyResolver resolver) { Debug.Assert(path != null); Debug.Assert(resolver != null); // res:// -based artifacts // if (PathStartsWithResPrefix(path)) { return MetadataArtifactLoaderCompositeResource.CreateResourceLoader( path, extensionCheck, validExtension, uriRegistry, resolver); } // Files and Folders // var normalizedPath = NormalizeFilePaths(path); if (Directory.Exists(normalizedPath)) { return new MetadataArtifactLoaderCompositeFile(normalizedPath, uriRegistry); } else if (File.Exists(normalizedPath)) { switch (extensionCheck) { case ExtensionCheck.Specific: CheckArtifactExtension(normalizedPath, validExtension); break; case ExtensionCheck.All: if (!IsValidArtifact(normalizedPath)) { throw new MetadataException(Strings.InvalidMetadataPath); } break; } return new MetadataArtifactLoaderFile(normalizedPath, uriRegistry); } throw new MetadataException(Strings.InvalidMetadataPath); }
[ResourceConsumption(ResourceScope.Machine)] //For CheckArtifactExtension method call. But the path is not created in this method. internal static MetadataArtifactLoader Create(string path, ExtensionCheck extensionCheck, string validExtension, ICollection <string> uriRegistry, MetadataArtifactAssemblyResolver resolver) { Debug.Assert(path != null); Debug.Assert(resolver != null); // res:// -based artifacts // if (MetadataArtifactLoader.PathStartsWithResPrefix(path)) { return(MetadataArtifactLoaderCompositeResource.CreateResourceLoader(path, extensionCheck, validExtension, uriRegistry, resolver)); } // Files and Folders // string normalizedPath = MetadataArtifactLoader.NormalizeFilePaths(path); if (Directory.Exists(normalizedPath)) { return(new MetadataArtifactLoaderCompositeFile(normalizedPath, uriRegistry)); } else if (File.Exists(normalizedPath)) { switch (extensionCheck) { case ExtensionCheck.Specific: CheckArtifactExtension(normalizedPath, validExtension); break; case ExtensionCheck.All: if (!MetadataArtifactLoader.IsValidArtifact(normalizedPath)) { throw EntityUtil.Metadata(Strings.InvalidMetadataPath); } break; } return(new MetadataArtifactLoaderFile(normalizedPath, uriRegistry)); } throw EntityUtil.Metadata(Strings.InvalidMetadataPath); }
internal static MetadataArtifactLoader CreateResourceLoader( string path, ExtensionCheck extensionCheck, string validExtension, ICollection<string> uriRegistry, MetadataArtifactAssemblyResolver resolver) { Debug.Assert(path != null); Debug.Assert(PathStartsWithResPrefix(path)); // if the supplied path ends with a separator, or contains only one // segment (i.e., the name of an assembly, or the wildcard character), // create a composite loader that can extract resources from one or // more assemblies // var createCompositeResLoader = false; string assemblyName = null; string resourceName = null; ParseResourcePath(path, out assemblyName, out resourceName); createCompositeResLoader = (assemblyName != null) && (resourceName == null || assemblyName.Trim() == wildcard); ValidateExtension(extensionCheck, validExtension, resourceName); if (createCompositeResLoader) { return new MetadataArtifactLoaderCompositeResource(path, assemblyName, resourceName, uriRegistry, resolver); } Debug.Assert(!string.IsNullOrEmpty(resourceName), "we should not get here is the resourceName is null"); var assembly = ResolveAssemblyName(assemblyName, resolver); return new MetadataArtifactLoaderResource(assembly, resourceName, uriRegistry); }
/// <summary> /// Load all resources from a specific assembly. /// </summary> /// <param name="fullName">The full name identifying the assembly to /// load resources from</param> /// <param name="uriRegistry">The global registry of URIs</param> /// <param name="resolveAssembly">delegate for resolve the assembly</param> private static Assembly ResolveAssemblyName(string assemblyName, MetadataArtifactAssemblyResolver resolver) { Debug.Assert(resolver != null); var referenceName = new AssemblyName(assemblyName); Assembly assembly; if (!resolver.TryResolveAssemblyReference(referenceName, out assembly)) { throw new FileNotFoundException(Strings.UnableToResolveAssembly(assemblyName)); } return assembly; }
/// <summary> /// Load all resources from the assembly/assemblies identified in the resource path. /// </summary> /// <param name="uriRegistry">The global registry of URIs</param> /// <param name="resolveAssembly"></param> /// <returns></returns> private static List<MetadataArtifactLoaderResource> LoadResources( string assemblyName, string resourceName, ICollection<string> uriRegistry, MetadataArtifactAssemblyResolver resolver) { Debug.Assert(resolver != null); var loaders = new List<MetadataArtifactLoaderResource>(); Debug.Assert(!string.IsNullOrEmpty(assemblyName)); if (assemblyName == wildcard) { foreach (var assembly in resolver.GetWildcardAssemblies()) { if (AssemblyContainsResource(assembly, ref resourceName)) { LoadResourcesFromAssembly(assembly, resourceName, uriRegistry, loaders); } } } else { var assembly = ResolveAssemblyName(assemblyName, resolver); LoadResourcesFromAssembly(assembly, resourceName, uriRegistry, loaders); } if (resourceName != null && loaders.Count == 0) { // they were asking for a specific resource name, and we didn't find it throw new MetadataException(Strings.UnableToLoadResource); } return loaders; }
[ResourceConsumption(ResourceScope.Machine)] //For Create method call. But the paths are not created in this method. internal static MetadataArtifactLoader CreateCompositeFromFilePaths(IEnumerable <string> filePaths, string validExtension, MetadataArtifactAssemblyResolver resolver) { ExtensionCheck extensionCheck; if (string.IsNullOrEmpty(validExtension)) { extensionCheck = ExtensionCheck.All; } else { extensionCheck = ExtensionCheck.Specific; } List <MetadataArtifactLoader> loaders = new List <MetadataArtifactLoader>(); // The following set is used to remove duplicate paths from the incoming array HashSet <string> uriRegistry = new HashSet <string>(StringComparer.OrdinalIgnoreCase); foreach (string path in filePaths) { if (string.IsNullOrEmpty(path)) { throw EntityUtil.Metadata(System.Data.Entity.Strings.NotValidInputPath, EntityUtil.CollectionParameterElementIsNullOrEmpty("filePaths")); } string trimedPath = path.Trim(); if (trimedPath.Length > 0) { loaders.Add(MetadataArtifactLoader.Create( trimedPath, extensionCheck, validExtension, uriRegistry, resolver) ); } } return(MetadataArtifactLoader.Create(loaders)); }
private static void LoadAllResourcesFromAssembly(Assembly assembly, ICollection<string> uriRegistry, List<MetadataArtifactLoaderResource> loaders, MetadataArtifactAssemblyResolver resolver) { Debug.Assert(assembly != null); string[] allresources = GetManifestResourceNamesForAssembly(assembly); foreach (string resourceName in allresources) { CreateAndAddSingleResourceLoader(assembly, resourceName, uriRegistry, loaders); } }
private static void LoadResourcesFromAssembly(Assembly assembly, string resourceName, ICollection<string> uriRegistry, List<MetadataArtifactLoaderResource> loaders, MetadataArtifactAssemblyResolver resolver) { if (resourceName == null) { LoadAllResourcesFromAssembly(assembly, uriRegistry, loaders, resolver); } else if (AssemblyContainsResource(assembly, ref resourceName)) { CreateAndAddSingleResourceLoader(assembly, resourceName, uriRegistry, loaders); } else { throw EntityUtil.Metadata(System.Data.Entity.Strings.UnableToLoadResource); } }
[ResourceConsumption(ResourceScope.Machine)] //For Create method call. But the paths are not created in this method. internal static MetadataArtifactLoader CreateCompositeFromFilePaths(IEnumerable<string> filePaths, string validExtension, MetadataArtifactAssemblyResolver resolver) { ExtensionCheck extensionCheck; if (string.IsNullOrEmpty(validExtension)) { extensionCheck = ExtensionCheck.All; } else { extensionCheck = ExtensionCheck.Specific; } List<MetadataArtifactLoader> loaders = new List<MetadataArtifactLoader>(); // The following set is used to remove duplicate paths from the incoming array HashSet<string> uriRegistry = new HashSet<string>(StringComparer.OrdinalIgnoreCase); foreach(string path in filePaths) { if (string.IsNullOrEmpty(path)) { throw EntityUtil.Metadata(System.Data.Entity.Strings.NotValidInputPath, EntityUtil.CollectionParameterElementIsNullOrEmpty("filePaths")); } string trimedPath = path.Trim(); if (trimedPath.Length > 0) { loaders.Add(MetadataArtifactLoader.Create( trimedPath, extensionCheck, validExtension, uriRegistry, resolver) ); } } return MetadataArtifactLoader.Create(loaders); }
/// <summary> /// This constructor expects to get the paths that have potential to turn into multiple /// artifacts like /// /// res://*/foo.csdl -- could be multiple assemblies /// res://MyAssembly/ -- could be multiple artifacts in the one assembly /// /// </summary> /// <param name="path">The path to the (collection of) resources</param> /// <param name="uriRegistry">The global registry of URIs</param> /// <param name="resolveAssembly"></param> internal MetadataArtifactLoaderCompositeResource(string originalPath, string assemblyName, string resourceName, ICollection <string> uriRegistry, MetadataArtifactAssemblyResolver resolver) { Debug.Assert(resolver != null); _originalPath = originalPath; _children = LoadResources(assemblyName, resourceName, uriRegistry, resolver).AsReadOnly(); }
internal static MetadataArtifactLoader CreateResourceLoader(string path, ExtensionCheck extensionCheck, string validExtension, ICollection <string> uriRegistry, MetadataArtifactAssemblyResolver resolver) { Debug.Assert(path != null); Debug.Assert(MetadataArtifactLoader.PathStartsWithResPrefix(path)); // if the supplied path ends with a separator, or contains only one // segment (i.e., the name of an assembly, or the wildcard character), // create a composite loader that can extract resources from one or // more assemblies // bool createCompositeResLoader = false; string assemblyName = null; string resourceName = null; ParseResourcePath(path, out assemblyName, out resourceName); createCompositeResLoader = (assemblyName != null) && (resourceName == null || assemblyName.Trim() == wildcard); ValidateExtension(extensionCheck, validExtension, resourceName); if (createCompositeResLoader) { return(new MetadataArtifactLoaderCompositeResource(path, assemblyName, resourceName, uriRegistry, resolver)); } Debug.Assert(!string.IsNullOrEmpty(resourceName), "we should not get here is the resourceName is null"); Assembly assembly = ResolveAssemblyName(assemblyName, resolver); return(new MetadataArtifactLoaderResource(assembly, resourceName, uriRegistry)); }
private static void LoadAllResourcesFromAssembly(Assembly assembly, ICollection <string> uriRegistry, List <MetadataArtifactLoaderResource> loaders, MetadataArtifactAssemblyResolver resolver) { Debug.Assert(assembly != null); string[] allresources = GetManifestResourceNamesForAssembly(assembly); foreach (string resourceName in allresources) { CreateAndAddSingleResourceLoader(assembly, resourceName, uriRegistry, loaders); } }
private static void LoadResourcesFromAssembly(Assembly assembly, string resourceName, ICollection <string> uriRegistry, List <MetadataArtifactLoaderResource> loaders, MetadataArtifactAssemblyResolver resolver) { if (resourceName == null) { LoadAllResourcesFromAssembly(assembly, uriRegistry, loaders, resolver); } else if (AssemblyContainsResource(assembly, ref resourceName)) { CreateAndAddSingleResourceLoader(assembly, resourceName, uriRegistry, loaders); } else { throw EntityUtil.Metadata(System.Data.Entity.Strings.UnableToLoadResource); } }
/// <summary> /// Load all resources from the assembly/assemblies identified in the resource path. /// </summary> /// <param name="uriRegistry">The global registry of URIs</param> /// <param name="resolveAssembly"></param> /// <returns></returns> private static List <MetadataArtifactLoaderResource> LoadResources(string assemblyName, string resourceName, ICollection <string> uriRegistry, MetadataArtifactAssemblyResolver resolver) { Debug.Assert(resolver != null); List <MetadataArtifactLoaderResource> loaders = new List <MetadataArtifactLoaderResource>(); Debug.Assert(!string.IsNullOrEmpty(assemblyName)); if (assemblyName == MetadataArtifactLoader.wildcard) { foreach (Assembly assembly in resolver.GetWildcardAssemblies()) { if (AssemblyContainsResource(assembly, ref resourceName)) { LoadResourcesFromAssembly(assembly, resourceName, uriRegistry, loaders, resolver); } } } else { Assembly assembly = ResolveAssemblyName(assemblyName, resolver); LoadResourcesFromAssembly(assembly, resourceName, uriRegistry, loaders, resolver); } if (resourceName != null && loaders.Count == 0) { // they were asking for a specific resource name, and we didn't find it throw EntityUtil.Metadata(System.Data.Entity.Strings.UnableToLoadResource); } return(loaders); }