阅读 52

Lua与C#交互问题

前言

  在学习Lua热更新的时候,遇到了一个很小的问题,但出错原因却很容易被忽略,从而浪费许多不必要的时间。

问题描述

  在开始学习Lua的时候,我先是建立了一个项目,名称为LuaInterface(这个名称就是出错的罪魁祸首,因为VS会自动创建一个名称为LuaInterface的命名空间), 然后我再里面写了如下内容:   

using System;
using LuaInterface;
namespace LuaInterface
{
    public class Program
    {
        public Program()
        {

        }
        static void Main(string[] args)
        {
            Lua luaw = new Lua();
            //执行lua脚本
            luaw.DoFile("Script.lua");
        }
        public static void staticMethod(int i, double d)
        {
            Console.WriteLine("静态方法");
        }
        public void CLRMethod()
        {
            Console.WriteLine("非静态方法");
        }
    }
    public class MyClass
    {
        public MyClass()
        { 
        }
    }
}
复制代码

   然后我又写了Script.lua脚本   

--require "luanet"
--加载CLR的类型
luanet.load_assembly("LuaInterface")
Program = luanet.import_type("LuaInterface.Program")
--实例化CLR对象
program = Program()
program:CLRMethod()
复制代码

  然后ctrl+f5运行程序,却报如下错误。

alt
错误信息

  经过查找发现是命名空间冲突导致,Lua与C#交互需要用到LuaInterface.dll,而此处又定义了LuaInterface命名空间,造成冲突。   

问题解决

  这里需要将LuaInterface命名空间间换为其他名称,然后右键点击项目,选择属性

  然后将程序集名称和默认命名空间换为新的命名空间名称后保存即可。
  若lua想要访问其他的自定义命名空间,都需要将此处的程序集名称和默认命名空间换为lua想要访问的命名空间的名称,否则坏事会出现上述错误。