[MonoDevelop] Further problems with libraries and assemblies

Dan Smithers dsmithers at talktalk.net
Wed Nov 21 06:12:28 EST 2007


Thanks Lluis,

I'm trying 0.17 again.

compiling the library as you suggest seems to have made it more stable.

I'd spent a long time trying to work out what was different between two
test apps and had forgotten that one was NET 2.0

dan

Lluis Sanchez wrote:
> El dt 20 de 11 del 2007 a les 12:36 -0500, en/na dsmithers at talktalk.net
> va escriure:
>> Hi,
>> I am now using MonoDevelop 0.15 (0.17 is not stable with Ubuntu 7.04)
> 
> MD 0.17 works great in Ubuntu 7.04. We haven't got any bug report about
> problems with that distro.
> 
>> I am still struggling with libraries, and have found a way that works
>> most of the time.
>> I have written and compiled a library using 
>>
>> gmcs -target:module -out:lib/mysock.dll src/mysock.cs
>>
>> I have populated an AssemblyInfo.cs file and compiled it with 
>>
>> gmsc -target:lib -out:lib/mysocklib.dll -addmodule:lib/mysock.dll
>> src/AssemblyInfo.cs
>>
>> As well as a line to a key file and various other strings,
>> AssemblyInfo.cs contained the line
>> [assembly: AssemblyVersion("1.0.*.*")] 
>>
>> but I found this to be very erratic. I kept getting invalid assembly
>> info compile errors after rebuilding the library.
>> I changed it to read 
>>
>> [assembly: AssemblyVersion("1.0.0.0")] 
>>
>> I also found that I needed to add a link to mysock.dll to the bin
>> directory containing my application.
>>
>> Does this all look sensible? 
> 
> To create a library, just run 
> 
> gmcs -target:lib src/mysock.cs src/AssemblyInfo.cs
> 
>> How can I specify which versions of an assembly are compatible with my
>> application?
> 
> It depends. If the library is installed in the GAC, your application
> will load only the library that exactly matches the version with which
> your application was compiled. If there isn't any library with the same
> exact version, your app will crash (this behavior can be changed by
> installing 'policies', which allow mapping one library version to
> another).
> 
> If the library is not installed in the GAC, your app will load any
> version you may have in the application directory.
> 
>> I also _sometimes_ have problems finding the
>> System.Net.Sockets.UdpClient::set_EnableBroadcast when I run the
>> binary. There is no compilation error, but I get a
>> System.MissingMethodException raised. I say sometimes as some builds
>> run correctly and the next build might fail. Usually rebuilding the
>> library is sufficient to sort this out.
>>
>> The error is as follows:
>>
>> Unhandled exception: System.MissingMethodException: Method not found
>> 'System.Net.Sockets.UdpClient::set_EnableBroadcast'
>>   at <0x00000> <unknown method>
>>   at AGSocket.CSocket.create(Int32 port, System.Byte[] address,
>> AGSocket.FCallback cb) [0x00000]
>>   at Main..ctor() [0x00000]
>>   at gtkclient.MainClass.Main (System.string[] args) [0x00000]
>>
>> I have a native C# application that uses this library that behaves
>> correctly.
> 
> Be careful when mixing assemblies compiled with mcs (.NET 1.1) and gmcs
> (.NET 2.0). UdpClient.EnableBroadcast was introduced in .NET 2.0. So for
> example let's say you create a library which sets
> UdpClient.EnableBroadcast and you compile it with gmcs. Then, you create
> an application which uses your library, but you compile that application
> with mcs. When you run your application using "mono yourapp.exe", mono
> will detect that yourapp.exe was compiled with the 1.1 runtime, and will
> load the 1.1 libraries. So it will load the 1.1 version of UdpClient,
> which doesn't have the EnableBroadcast property, and you'll get the
> MissingMethod exception.
> 
>> Is there some path variable that I need to set?
>> What about MONO_PATH? the runtime errors sometimes mention this, but
>> the main mono documentation deprecates its use.
> 
> It is not a path problem, just a conflict of runtime versions.
> 
> Lluis.
> 
> 


More information about the Monodevelop-list mailing list