[Mono-list] Embedding resources (bug?)

Mariano Alarcon marianoa@itcsoluciones.com
Tue, 07 Sep 2004 12:55:08 -0400


I found a strange behavior with this code:

using System;
using System.Drawing;
using System.Resources;
using System.Reflection;

namespace ResourceTests
{
    /// <summary>
    /// Gives an exception when trying to access
    /// an embedded resource.
    /// </summary>
    class ResourceExceptionTest
    {
        static void Main(string[] args)
        {
            ResourceManager rm = new ResourceManager("Imagenes",
                               Assembly.GetExecutingAssembly());

            Image img = (Image) rm.GetObject("imagen");
            img.Save("test.gif", System.Drawing.Imaging.ImageFormat.Gif);

            Console.WriteLine("The image was successfully saved!");
        }
    }
}

I created a "Imagenes.resources" file using an utility called "Resourcer" 
from Lutz Roeder which can be downloaded from here: 
(http://www.aisto.com/roeder/dotnet/). But I don't think that's the problem.

Here is what happens:

- runs on windows with ms.net 1.1
- compiles on linux (mono 1.0) and runs fine (mono's binary) on windows 
with ms.net 1.1
- on linux running mono 1.0 it explodes with:

Unhandled Exception: 
System.Runtime.Serialization.SerializationException: The constructor to 
deserialize an object of type System.Drawing.Bitmap was not found.
in [0x00093] (at 
/root/monosource/mcs-1.0/class/corlib/System.Runtime.Serialization/ObjectManager.cs:528) 
System.Runtime.Serialization.ObjectRecord:LoadData 
(System.Runtime.Serialization.ObjectManager,System.Runtime.Serialization.ISurrogateSelector,System.Runtime.Serialization.StreamingContext)
in [0x00077] (at 
/root/monosource/mcs-1.0/class/corlib/System.Runtime.Serialization/ObjectManager.cs:82) 
System.Runtime.Serialization.ObjectManager:DoFixups ()
in [0x00015] (at 
/root/monosource/mcs-1.0/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:115) 
System.Runtime.Serialization.Formatters.Binary.ObjectReader:ReadNextObject 
(System.IO.BinaryReader)
in [0x00045] (at 
/root/monosource/mcs-1.0/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:105) 
System.Runtime.Serialization.Formatters.Binary.ObjectReader:ReadObjectGraph 
(System.IO.BinaryReader,bool,object&,System.Runtime.Remoting.Messaging.Header[]&)
in [0x0007f] (at 
/root/monosource/mcs-1.0/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:163) 
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter:Deserialize 
(System.IO.Stream,System.Runtime.Remoting.Messaging.HeaderHandler)
in [0x00003] (at 
/root/monosource/mcs-1.0/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:127) 
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter:Deserialize 
(System.IO.Stream)
in [0x002ce] (at 
/root/monosource/mcs-1.0/class/corlib/System.Resources/ResourceReader.cs:282) 
System.Resources.ResourceReader:ResourceValue (int)
in [0x0003e] (at 
/root/monosource/mcs-1.0/class/corlib/System.Resources/ResourceReader.cs:386) 
ResourceEnumerator:get_Value ()
in [0x00050] (at 
/root/monosource/mcs-1.0/class/corlib/System.Resources/ResourceSet.cs:201) 
System.Resources.ResourceSet:ReadResources ()
in [0x00033] (at 
/root/monosource/mcs-1.0/class/corlib/System.Resources/ResourceSet.cs:157) 
System.Resources.ResourceSet:GetObject (string,bool)
in [0x00040] (at 
/root/monosource/mcs-1.0/class/corlib/System.Resources/ResourceManager.cs:180) 
System.Resources.ResourceManager:GetObject 
(string,System.Globalization.CultureInfo)
in [0x00003] (at 
/root/monosource/mcs-1.0/class/corlib/System.Resources/ResourceManager.cs:162) 
System.Resources.ResourceManager:GetObject (string)
in [0x00016] (at /home/http/rbTestMono/ResourceTests/ResourceTest.cs:20) 
ResourceTests.ResourceExceptionTest:Main (string[])

Am I doing something wrong? Is Bitmap not supported yet? You can't save 
to .gif? Should I report a bug?

Mariano.