3 using System
.Reflection
;
6 namespace Mono
.Documentation
{
7 public class ManifestResourceResolver
: XmlUrlResolver
{
10 public ManifestResourceResolver (params string[] dirs
)
12 this.dirs
= (string[]) dirs
.Clone ();
15 public override Uri
ResolveUri (Uri baseUri
, string relativeUri
)
18 Assembly
.GetExecutingAssembly ().GetManifestResourceNames (),
20 return new Uri ("x-resource:///" + relativeUri
);
21 foreach (var dir
in dirs
) {
22 if (File
.Exists (Path
.Combine (dir
, relativeUri
)))
23 return base.ResolveUri (new Uri ("file://" + new DirectoryInfo (dir
).FullName
+ "/"),
26 return base.ResolveUri (baseUri
, relativeUri
);
29 public override object GetEntity (Uri absoluteUri
, string role
, Type ofObjectToReturn
)
31 if (ofObjectToReturn
== null)
32 ofObjectToReturn
= typeof(Stream
);
33 if (ofObjectToReturn
!= typeof(Stream
))
34 throw new XmlException ("This object type is not supported.");
35 if (absoluteUri
.Scheme
!= "x-resource")
36 return base.GetEntity (absoluteUri
, role
, ofObjectToReturn
);
37 return Assembly
.GetExecutingAssembly().GetManifestResourceStream (
38 absoluteUri
.Segments
[1]);