Как я могу использовать NLua динамической загрузки CSharp dll в другом каталоге? - PullRequest
0 голосов
/ 24 июня 2019

Привет have У меня вопрос по импорту NLua .NET.
Я надеюсь, что динамическая загрузка файла CSharp dll при необходимости при запуске программы.

Моя программа NLuaConsoleApp не имеет прямой ссылки на библиотеку классов MyLibrary.

Это код NLuaConsoleApp.exe:

using NLua;
using System;
using System.Text;<br>
namespace NLuaConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Lua lua = new Lua();
                lua.LoadCLRPackage();                    
                //Provide current directory path 
                lua["gloDir"] = AppDomain.CurrentDomain.BaseDirectory; 
                //Run the Demo.lua script
                lua.DoFile(AppDomain.CurrentDomain.BaseDirectory + "Demo.lua"); 
                Console.WriteLine("Compeleted!");
                Console.ReadKey();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadKey();
            }
        }
    }
}


Это код MyLibrary.dll:

using System;
namespace MyLibrary
{
    public class MyLibrary
    {
        //Show a message
        public static void ShowMsg(string msg)
        {
            Console.WriteLine(msg);  
        }
    }
}

Если моя структура каталогов будет:

project\NLuaConsoleApp.exe
project\Demo.lua
project\MyLibrary.dll

и код Demo.lua:

--reference .\MyLibrary.dll
import ("MyLibrary", "MyLibrary") 
MyLibrary.ShowMsg("Lua call ShowMsg.")

Этот код Demo.lua успешно выполняется.

Если я изменю структуру каталогов, будет:

project\NLuaConsoleApp.exe
project\Demo.lua
project\exp\MyLibrary.dll

и измените код Demo.lua:

--reference .\exp\MyLibrary.dll
import (".\\exp\\MyLibrary", "MyLibrary") 
MyLibrary.ShowMsg("Lua call ShowMsg.")

Произошла ошибка: попытка индексировать нулевое значение (глобальное «MyLibrary»).


Подскажите пожалуйста что делать?

...