Assembly.GetExecutingAssembly()无法在嵌入式单声道中工作?

时间:2013-02-16 22:35:23

标签: 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.

1 个答案:

答案 0 :(得分:2)

您没有在程序中执行任何程序集,因此该上下文中的ExecutingAssembly没有意义(但是需要更好的错误)。 您需要在程序集中提供常用的静态Main()入口点,并使用mono_runtime_exec_main()执行它。