I am trying to use binary serialisation to store and retrieve objects from file and to/from a database. This all seemed to work fine when running in the IDE, but when I build a release version of my application, it no longer reads the data from the files that I have generated, nor from the database that I have written to with the debug version.I don't get any error messages, I just get all my properties set to nothing.. This application is likely to be under continual development for some time, so I will need to be able to access the same data with both the debug and release versions.
Any suggestions appreciated. TIA Phil.
PS. I have also tried using the XMLSerializer (I would prefer binary as it is more compact for storage in a database), but I get an error indicating that multi-dimensional arrays are not supported.
>I am trying to use binary serialisation to store and retrieve objects from >file and to/from a database. This all seemed to work fine when running in >the IDE, but when I build a release version of my application, it no longer >reads the data from the files that I have generated, nor from the database >that I have written to with the debug version.
Seems to be working now. I think it may have just have been an issue with file locations.
> >I am trying to use binary serialisation to store and retrieve objects > >from file and to/from a database. This all seemed to work fine when > >running in the IDE, but when I build a release version of my application, > >it no longer reads the data from the files that I have generated, nor > >from the database that I have written to with the debug version.
> Seems to be working now. > I think it may have just have been an issue with file locations.
Well I thought it had started working, but it's failing again now. When I run from the VB IDE it all works fine, and when I run my deployed application it all works fine, but if I try to use a file created when running under the IDE it will not deserialise properly when running my deployed application and vice versa.
Any suggestions appreciated.
My serialisation code is very simple:
' serialise: With New BinaryFormatter .Serialize(MyStream, MyObj) End With
' de-serialise: MyObj= (New BinaryFormatter).Deserialize(Stream)
I have done a bit more testing, and I think the problem may be to do with versioning. I get the same problem if I serialise to a file, and then rebuild and re-deploy the application. The new version does not seem to want to deserialise the data produced with the old version. I have tried setting AssemblyFormat = Formatters.FormatterAssemblyStyle.Simple before the Serialze and Deserialize calls, but this doesn't seem to make any difference.
Something may be blowing up behind the scenes as its deserializing which is why your object has nothing in it. Try using DbgView to see if there are any exceptions being thrown as your object is deserializing.
>I have done a bit more testing, and I think the problem may be to do with > versioning. I get the same problem if I serialise to a file, and then > rebuild and re-deploy the application. The new version does not seem to > want > to deserialise the data produced with the old version. > I have tried setting > AssemblyFormat = Formatters.FormatterAssemblyStyle.Simple > before the Serialze and Deserialize > calls, but this doesn't seem to make any difference.
> Something may be blowing up behind the scenes as its deserializing which > is why your object has nothing in it. Try using DbgView to see if there > are any exceptions being thrown as your object is deserializing.
Thanks Adam,
I've left this for a while, as I didn't seem to be getting anywhere, but I will need to come back to it soon. I haven't used DbgView, so I'll take a look at that, and see if it helps to shed any light on the problem. Is this something included with VS2008, or is it something extra I need to download? I did do some further tests last week, and I think my original assumption was correct, that the problem is an incompatibuility between the release and debug versions, not anything to do with the version number of the assemblies. It is a very simple class, just a few private member variables (mostly arrays of double or string) with public properties to get/set the values. I did have an additional complication that my assemblies were being loaded from a database in the released version rather than directly from a DLL, but I have moved these classes into a separate new DLL, and I still have the problem.