コード例 #1
0
        /// <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);
                    }
                }
            }
        }