Hi,

As you said it might've been caused by MonobjC, I just tested some more, to see if I could rule out MonobjC/determine for sure it was MonobjC.


So, I compiled my application using Visual Studio.
And did mkbundle manually on the commandline (instead of using the MonobjC NAnt task).

So I didn't use MonobjC at all, and I'm still getting the same problem.

It seems this is a limitation of mkbundle.
And I can see why, it can't possibly know which assembly to use, because the namespaces, classname, ... is exactly the same
However, I kind of need this to work.
Is there another way to do what I'm doing? Some sort of workaround?
Other people must've encountered this before.

Now that I know it's not MonobjC related, I'll look around to see if there's a mailing list that is better suited for this kind of question.

Thanks for the reply, and for looking into it!

Btw, we've switched to the latest version of MonobjC, and are testing with your patched Mono version (which indeed fixes the SL crashes and the bundled machine.config) The application is pretty complex (compared to the other MonobjC projects I've seen so far) and is currently being tested. So far, it looks pretty good, we'll let you know if we encounter any problems.

Keep up the good work.

- Kenny


Op 19 Dec 2009, om 11:03 heeft Laurent Etiemble het volgende geschreven:

Hello,

I think this is a Monobjc issue, because the name of the satellite assemblies is mis-generated during the assembly phase. I have already make some corrections to handle assembly name with space, but I have missed the satellite case.

I will try to give it a try this week-end.

Regards, Laurent Etiemble.

2009/12/18 Kenny Clement <psyki...@gmail.com>
Hi,

I'm not too sure this belongs on the MonobjC mailing list, as this seems more of a problem/shortcoming in mkbundle, but I am using the NAnt.Monobjc tasks, so,
and I am looking for a solution for my MonobjC app, so here goes:

One of the more standard ways of localizing Applications, is by using resource files (.resx) for getting strings out of it.
Let's say we have an application that uses strings from Resource.resx
If you then copy Resource.resx to Resource.nl-BE.resx
and set the thread's CurrentCUlture/CurrentUICulture to nl-BE the string you requested will be from the Resource.nl-BE.resx file.

If Visual studio, or even Mono compiles this, it creates 'Satellite assemblies': 1 for each language you have the resx file in.
I assume .NET then automagically loads these through Reflection.

This works with Mono.
However, when I deploy to my customers, I don't want them to install the (patched) Mono Framework, I use mkbundle.

However, with mkBundle, it seems to be impossible to include more than 1 of these satellite assemblies.
As I need (currently) 3 languages, this is a bit of a problem.

I've created a sample application to show the problem a little clearer. It's a console application, that requests you what culture you want to load, and then displays a localized string from the resource file.

There's a nant.build file in the sample, with 3 targets:
clean (cleans up the ./bin and ./dist folder)
build (builds the app in ./bin)
bundle (builds the app in ./bin + uses mkbundle to create a bundle in ./dist)

nant clean build
 - works as expected. execute the app with
mono bin/ConsoleApp.exe

nant clean bundle
- Does not work in the current version, gives the output you can see below. To make it work, you can comment 2 lines, as described in the file, but then you will only support 1 language

Is this a bug?
Is this simply impossible?
Is there some sort of workaround available?

Thanks in advance,



- Kenny



mkbundle output:

...........
 [mkbundle]   Reference added 
'file:///Library/Frameworks/Mono.framework/Versions/2.4/lib/mono/gac/System.Security/2.0.0.0__b03f5f7f11d50a3a/System.Security.dll'
 [mkbundle]   Reference added 
'file:///Library/Frameworks/Mono.framework/Versions/2.4/lib/mono/gac/Mono.Security/2.0.0.0__0738eb9f132ed756/Mono.Security.dll'
 [mkbundle] Getting references for additional libraries
 [mkbundle]   Reference added 
'file:///Users/kclement/Projects/homes/kclement/code/dotnet/Localization/bin/nl-BE/ConsoleApp.resources.dll'
 [mkbundle]   Reference added 
'file:///Users/kclement/Projects/homes/kclement/code/dotnet/Localization/bin/fr-FR/ConsoleApp.resources.dll'
 [mkbundle]   Reference added 
'file:///Users/kclement/Projects/homes/kclement/code/dotnet/Localization/bin/en-US/ConsoleApp.resources.dll'
 [mkbundle] Generating native sources...
[mkbundle] Embedding Assembly '/Users/kclement/Projects/homes/ kclement/code/dotnet/Localization/bin/ConsoleApp.exe' [mkbundle] Embedding Assembly '/Library/Frameworks/Mono.framework/ Versions/2.4/lib/mono/2.0/mscorlib.dll' [mkbundle] Embedding Assembly '/Library/Frameworks/Mono.framework/ Versions/2.4/lib/mono/gac/System/2.0.0.0__b77a5c561934e089/System.dll' [mkbundle] Embedding Assembly '/Library/Frameworks/Mono.framework/ Versions/2.4/lib/mono/gac/System.Configuration/ 2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll' [mkbundle] Embedding Assembly '/Library/Frameworks/Mono.framework/ Versions/2.4/lib/mono/gac/System.Xml/2.0.0.0__b77a5c561934e089/ System.Xml.dll' [mkbundle] Embedding Assembly '/Library/Frameworks/Mono.framework/ Versions/2.4/lib/mono/gac/System.Security/2.0.0.0__b03f5f7f11d50a3a/ System.Security.dll' [mkbundle] Embedding Assembly '/Library/Frameworks/Mono.framework/ Versions/2.4/lib/mono/gac/Mono.Security/2.0.0.0__0738eb9f132ed756/ Mono.Security.dll' [mkbundle] Embedding Assembly '/Users/kclement/Projects/homes/ kclement/code/dotnet/Localization/bin/nl-BE/ConsoleApp.resources.dll' [mkbundle] Embedding Assembly '/Users/kclement/Projects/homes/ kclement/code/dotnet/Localization/bin/fr-FR/ConsoleApp.resources.dll' [mkbundle] Embedding Assembly '/Users/kclement/Projects/homes/ kclement/code/dotnet/Localization/bin/en-US/ConsoleApp.resources.dll'
 [mkbundle] Source generation done in 14.67 seconds
 [mkbundle] Compiling native sources...
[mkbundle] /Users/kclement/Projects/homes/kclement/code/dotnet/ Localization/dist/ConsoleApp.s:6012998:FATAL:Symbol _assembly_data_ConsoleApp_resources_dll already defined. [mkbundle] /Users/kclement/Projects/homes/kclement/code/dotnet/ Localization/dist/ConsoleApp.c:22: error: redefinition of 'assembly_bundle_ConsoleApp_resources_dll' [mkbundle] /Users/kclement/Projects/homes/kclement/code/dotnet/ Localization/dist/ConsoleApp.c:20: error: previous definition of 'assembly_bundle_ConsoleApp_resources_dll' was here [mkbundle] /Users/kclement/Projects/homes/kclement/code/dotnet/ Localization/dist/ConsoleApp.c:24: error: redefinition of 'assembly_bundle_ConsoleApp_resources_dll' [mkbundle] /Users/kclement/Projects/homes/kclement/code/dotnet/ Localization/dist/ConsoleApp.c:22: error: previous definition of 'assembly_bundle_ConsoleApp_resources_dll' was here
 [mkbundle] Compilation done in 8.41 seconds
 [mkbundle] Collecting native libraries
............







Reply via email to