[svn] r6274: nemerle/trunk/ncc/generation/HierarchyEmitter.n
malekith
svnadmin at nemerle.org
Sun May 14 18:37:10 CEST 2006
Log:
Use internal mono API for embedding resources on mono and .NET 2.0 when available.
Author: malekith
Date: Sun May 14 18:37:10 2006
New Revision: 6274
Modified:
nemerle/trunk/ncc/generation/HierarchyEmitter.n
Modified: nemerle/trunk/ncc/generation/HierarchyEmitter.n
==============================================================================
--- nemerle/trunk/ncc/generation/HierarchyEmitter.n (original)
+++ nemerle/trunk/ncc/generation/HierarchyEmitter.n Sun May 14 18:37:10 2006
@@ -137,11 +137,32 @@
/* we can embed resources only on mono or .NET 2.0 */
foreach (element in Options.EmbeddedResources) {
- def (file, _) = escape_resource (element);
+ def (file, name) = escape_resource (element);
try {
if (File.Exists (file)) {
def fs = File.OpenRead (file);
- _module_builder.DefineManifestResource(element, fs, ResourceAttributes.Public);
+
+ def meth = _module_builder.GetType ().GetMethod ("DefineManifestResource");
+ if (meth == null) {
+ def res = array (fs.Length :> int);
+ def loop (pos) {
+ if (res.Length == pos) {}
+ else
+ loop (pos + fs.Read(res, pos, res.Length - pos));
+ }
+ loop (0);
+
+ def meth = _assembly_builder.GetType ()
+ .GetMethod ("EmbedResource", BindingFlags.NonPublic|BindingFlags.Instance);
+ if (meth == null)
+ Message.Error ("cannot find API for saving resources");
+ else
+ _ = meth.Invoke (_assembly_builder, array [name : object, res,
+ ResourceAttributes.Public]);
+ } else {
+ _ = meth.Invoke (_module_builder, array [element : object,
+ fs, ResourceAttributes.Public])
+ }
}
else
Message.Error ("Could not find resource " + file);
More information about the svn
mailing list