嵌入式Mono中的Assembly.GetExecutingAssembly()无法工作?

3

我试图将Mono嵌入到一个C++可执行文件中,但是在调用Assembly.GetExecutingAssembly时出现了崩溃。有任何想法我可能错过了什么?

编辑:使用的是mono 3.0.3

EmbeddedMonoTest.cpp:

// EmbeddedMonoTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <mono/metadata/debug-helpers.h>
#include <mono/metadata/exception.h>
#include <mono/jit/jit.h>
#include <mono/metadata/assembly.h>

int _tmain(int argc, _TCHAR* argv[])
{
    MonoDomain* domain = mono_jit_init_version ("ClassLibrary1", "v4.0.30319");
    MonoAssembly* _assembly_fbmonoengine    = mono_domain_assembly_open (domain, "ClassLibrary1.dll");  
    MonoImage* _image_fbmonoengine      = mono_assembly_get_image (_assembly_fbmonoengine);
    MonoClass* klass = mono_class_from_name(_image_fbmonoengine, "ClassLibrary1", "Class1");
    MonoMethod* test = mono_class_get_method_from_name(klass, "Test"    , 0);
    mono_runtime_invoke(test, NULL, NULL, NULL); 
    return 0;
}

Class1.cs :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ClassLibrary1
{
    public class Class1
    {
        public static void Test()
        {
            Assembly.GetExecutingAssembly();
        }
    }
}

错误信息:
Unhandled exception at 0x65ad2148 in EmbeddedMonoTest.exe: 0xC0000005: Access violation reading location 0x`00000008.

如果我们在谈论.NET,并且考虑到您已经正确地托管了运行时并已经正确地加载了程序集,那么我会认为这是一个错误。因此,知道您使用的Mono的确切(构建)版本可能会有所帮助。 - stakx - no longer contributing
1个回答

2

您的程序中没有执行任何汇编代码,因此在这种情况下,ExecutingAssembly没有意义(尽管需要更好的错误提示)。 您需要在程序集中提供通常的静态Main()入口点,并使用mono_runtime_exec_main()来执行它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接