}
}
- foreach (var rsc in Context.GetAssemblies ()
- .SelectMany (asm => asm.Modules)
- .SelectMany (mod => mod.Resources)
- .Where (res => res.ResourceType == ResourceType.Embedded)
- .Where (res => Path.GetExtension (res.Name) == ".xml")
- .Where (res => IsReferenced (GetAssemblyName (res.Name)))
- .Cast<EmbeddedResource> ()) {
- try {
- if (Context.LogInternalExceptions)
- Console.WriteLine ("Processing embedded resource linker descriptor: {0}", rsc.Name);
-
- Context.Pipeline.AddStepAfter (typeof (TypeMapStep), GetExternalResolveStep (rsc));
- } catch (XmlException ex) {
- /* This could happen if some broken XML file is embedded. */
- if (Context.LogInternalExceptions)
- Console.WriteLine ("Error processing {0}: {1}", rsc.Name, ex);
+ foreach (var asm in Context.GetAssemblies ()) {
+ foreach (var rsc in asm.Modules
+ .SelectMany (mod => mod.Resources)
+ .Where (res => res.ResourceType == ResourceType.Embedded)
+ .Where (res => Path.GetExtension (res.Name) == ".xml")
+ .Where (res => IsReferenced (GetAssemblyName (res.Name)))
+ .Cast<EmbeddedResource> ()) {
+ try {
+ if (Context.LogInternalExceptions)
+ Console.WriteLine ("Processing embedded resource linker descriptor: {0}", rsc.Name);
+
+ Context.Pipeline.AddStepAfter (typeof (TypeMapStep), GetExternalResolveStep (rsc, asm));
+ } catch (XmlException ex) {
+ /* This could happen if some broken XML file is embedded. */
+ if (Context.LogInternalExceptions)
+ Console.WriteLine ("Error processing {0}: {1}", rsc.Name, ex);
+ }
}
}
}
return false;
}
- static ResolveFromXmlStep GetExternalResolveStep (EmbeddedResource resource)
+ static ResolveFromXmlStep GetExternalResolveStep (EmbeddedResource resource, AssemblyDefinition assembly)
{
- return new ResolveFromXmlStep (GetExternalDescriptor (resource));
+ return new ResolveFromXmlStep (GetExternalDescriptor (resource), "resource " + resource.Name + " in " + assembly.FullName);
}
static ResolveFromXmlStep GetResolveStep (string descriptor)
{
- return new ResolveFromXmlStep (GetDescriptor (descriptor));
+ return new ResolveFromXmlStep (GetDescriptor (descriptor), "descriptor " + descriptor + " from " + Assembly.GetExecutingAssembly ().FullName);
}
static XPathDocument GetExternalDescriptor (EmbeddedResource resource)
namespace Mono.Linker.Steps {
+ public class XmlResolutionException : Exception {
+ public XmlResolutionException (string message, Exception innerException)
+ : base (message, innerException)
+ {
+ }
+ }
+
public class ResolveFromXmlStep : ResolveStep {
static readonly string _signature = "signature";
static readonly string _ns = string.Empty;
XPathDocument _document;
+ string _xmlDocumentLocation;
- public ResolveFromXmlStep (XPathDocument document)
+ public ResolveFromXmlStep (XPathDocument document, string xmlDocumentLocation = "<unspecified>")
{
_document = document;
+ _xmlDocumentLocation = xmlDocumentLocation;
}
protected override void Process ()
if (nav.LocalName != "linker")
return;
- ProcessAssemblies (Context, nav.SelectChildren ("assembly", _ns));
+ try {
+ ProcessAssemblies (Context, nav.SelectChildren ("assembly", _ns));
+ } catch (Exception ex) {
+ throw new XmlResolutionException (string.Format ("Failed to process XML description: {0}", _xmlDocumentLocation), ex);
+ }
}
void ProcessAssemblies (LinkContext context, XPathNodeIterator iterator)