/// <summary> /// Extract resources out of library project references /// </summary> private void ExtractLibraryProjectResources(string folder, string referencePath, AssemblyResolver resolver) { #if DEBUG //Debugger.Launch(); #endif var parameters = new ReaderParameters { AssemblyResolver = resolver }; var assembly = resolver.Load(referencePath, parameters); // Go over all LibraryProjectReference attributes. foreach (var attr in assembly.CustomAttributes.Where(x => (x.AttributeType.Name == AttributeConstants.LibraryProjectReferenceAttributeName) && (x.AttributeType.Namespace == AttributeConstants.Dot42AttributeNamespace))) { var libPackageName = (string)attr.ConstructorArguments[0].Value; var prefix = libPackageName + ".res."; foreach (var resource in assembly.MainModule.Resources.OfType <EmbeddedResource>().Where(x => x.Name.StartsWith(prefix))) { var name = resource.Name.Substring(prefix.Length); var parts = name.Split(new[] { '.' }, 2); if (parts.Length == 2) { // Export resource to disk var targetPath = Path.Combine(Path.Combine(folder, parts[0]), parts[1]); var outputFolder = Path.GetDirectoryName(targetPath); if (!Directory.Exists(outputFolder)) { Directory.CreateDirectory(outputFolder); } File.WriteAllBytes(targetPath, resource.GetResourceData()); // Post process var xmlName = parts[0].Split(new[] { '-' }, 2)[0]; var resourceType = ResourceExtensions.GetResourceTypeFromXmlName(xmlName); ProcessResource(targetPath, resourceType); } } } }