Thanks for the answer.

> you 100% sure the old files are all overwritten?
Yes, I have checked the file time... and also included a

   remove(fileName);

to be sure!

>There are a couple of different ways to get compiled binary at runtime without a system() call
Which ones?

I have tried something:
calling mono_image_open_from_data_with_name and mono_assembly_load_from_full with a different file name on every compile and it is working!!!

so, the following code is not reloading properly:

   monoEngine->fileName = strdup("code.dll");
   monoEngine->image = mono_image_open_from_data_with_name(data, dataLen,
   TRUE /* copy data */,
   &status,
   FALSE /* ref only */,
   monoEngine->fileName);
   if (status != MONO_IMAGE_OK || monoEngine->image == NULL)
   {
   }
   monoEngine->assembly = mono_assembly_load_from_full(monoEngine->image,
   monoEngine->fileName,
   &status, FALSE);
   if (status != MONO_IMAGE_OK || monoEngine->assembly == NULL)
   {
   }


but, the same with a different file name on every run (only the monoEngine->fileName creation differ) is working:

   static int version = 1;
   ...

   sprintf(monoEngine->fileName,  "code%03d.dll", version);
   version ++;
   monoEngine->image = mono_image_open_from_data_with_name(data, dataLen,
                                                              TRUE /*
   copy data */,
   &status,
   FALSE /* ref only */,
   monoEngine->fileName);
   if (status != MONO_IMAGE_OK || monoEngine->image == NULL)
   {
   }
   monoEngine->assembly = mono_assembly_load_from_full(monoEngine->image,
   monoEngine->fileName,
   &status, FALSE);
   if (status != MONO_IMAGE_OK || monoEngine->assembly == NULL)
   {
   }

Is there a wait to be introduced after a mono_domain_unload? It is like doing mono_domain_unload, mono_image_open_from_data_with_name and mono_assembly_load_from_full with the same file name is detected and the unload is not performed....


> This is more likely to be a problem outside of mono.
I do agree... but I am running out of idea on why!!!


and for mono_method_desc_search_in_image? is it bug?

Pierre

On 13/02/2018 07:15, R Zaghi wrote:
I think we need to know a bit more about what you are doing in the code exactly but as a quick first guess if you are recompiling using a system() call then are you 100% sure the old files are all overwritten? There are a couple of different ways to get compiled binary at runtime without a system() call which I prefer but if you are using a system() call then have you tried two separate calls with two parallel binaries loaded as a start to debug your code?

This is more likely to be a problem outside of mono.

Ramin




Ramin Zaghi

*Mosaic3DX™ | User Interface Technology*
St John's Innovation Centre,
Cowley Road,
Cambridge,
CB4 0WS, UK*
*
*E*:**rza...@mosaic3dx.com <mailto:rza...@mosaic3dx.com>
*T*: +44 1223 421 311 <tel:+44%201223%20421311>
http://linkedin.com/in/raminzaghi



On Tue, 13 Feb 2018 at 01:27, pierre <pierre.saun...@ppmodeler.com <mailto:pierre.saun...@ppmodeler.com>> wrote:

    Hi,

    I am trying to embed mono... and I ran into a problem with the code:

        monoMethodDesc = mono_method_desc_new("Script:Main", 0);
        method = mono_method_desc_search_in_image(monoMethodDesc,
        monoEngine->image);


    It is returning a method on the cs code:

        public class Script
        {
          static public void Main ()
          {
            ScriptEngine.report("--Main Called ");
          }
        }


    but it is also returning a method on the cs code (with the wrong
    class name):

        public class Script*2*
        {
          static public void Main ()
          {
            ScriptEngine.report("--Main Called ");
          }
        }

    while it should only return for:

        monoMethodDesc = mono_method_desc_new("Script2:Main", 0);


    Am i doing something wrong or is this a bug? It seem that
    mono_method_desc_search_in_image is returning a value if the
    actual class name is starting with the given  class name.... so,
    the same method is returned if I look for "Script:Main" but the
    declared class is "Script:Main", "Script_test:Main" or
    "Script2:Main"...

    and a question:
    is there a way to know if mono_domain_unload was successful or not?

    I am creating an app domain per script so that I can recompile and
    reload the script at will...
    I do not detect any error, but the new script seems not to replace
    the old one...
    Basically, I am doing:

        res = mono_domain_set(rootDomain, FALSE);
        mono_domain_unload(monoEngine->domain);
        monoEngine->domain =
        mono_domain_create_appdomain("ScriptEngine-sub", NULL);

        data = readFile(f, &dataLen);
        fclose(f);
        monoEngine->image = mono_image_open_from_data_with_name(data,
        dataLen,
        TRUE /* copy data */,
        &status,
        FALSE /* ref only */,
        monoEngine->fileName);
          free(data);
          if (status != MONO_IMAGE_OK || monoEngine->image == NULL)
          {
            return FALSE;
          }

            // load the assembly
          monoEngine->assembly =
        mono_assembly_load_from_full(monoEngine->image,
        monoEngine->fileName,
        &status, FALSE);
          if (status != MONO_IMAGE_OK || monoEngine->assembly == NULL)
          {
            mono_image_close(monoEngine->image);
            return FALSE;
          }

    but it does not seem to work. The code that runs is always the
    first loaded one!!

    I also added the following code to my engine:

        mono_trace_set_log_handler(monoLogCallback, NULL);
        mono_trace_set_print_handler(monoPrintCallback);
        mono_trace_set_printerr_handler(monoPrintCallback);
        mono_trace_set_level_string ("debug");


    but it is reporting debug info only on the first run... is there a
    way to having it working on every run?

    Lastly, Is there a way to compile cs source without launching a

        system("msc.code.cs -target:library");

    thanks in advance

    Pierre



    _______________________________________________
    Mono-list maillist  -mono-l...@lists.dot.net 
<mailto:mono-l...@lists.dot.net>
    http://lists.dot.net/mailman/listinfo/mono-list

    _______________________________________________
    Mono-devel-list mailing list
    Mono-devel-list@lists.dot.net <mailto:Mono-devel-list@lists.dot.net>
    http://lists.dot.net/mailman/listinfo/mono-devel-list

--



Ramin Zaghi

*Mosaic3DX™ | User Interface Technology*
St John's Innovation Centre,
Cowley Road,
Cambridge,
CB4 0WS, UK*
*
*E*:**rza...@mosaic3dx.com <mailto:rza...@mosaic3dx.com>
*T*: +44 1223 421 311
http://linkedin.com/in/raminzaghi


_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.dot.net
http://lists.dot.net/mailman/listinfo/mono-devel-list

Reply via email to