LuaInterface - Как я могу загрузить сборку с любого пути?

Я пытаюсь загрузить сборку.net, используя LuaInterface. Если я помещаю сборку в ту же папку, что и мой исполняемый файл (и мои LuaInterface.dll и LuaNet.dll), то все работает отлично. Я хотел бы переместить сборку в другую папку, но когда я пытаюсь это сделать, я получаю "Исключение.NET в коде пользователя". Я пытался:

package.path = package.path .. "C:\\path\\to\\my\\assembly\\?.dll"
luanet.load_assembly("MyAssembly")

а также

luanet.load_assembly("C:\\path\\to\\my\\assembly\\MyAssembly")

а также

luanet.load_assembly("C:\\path\\to\\my\\assembly\\MyAssembly.dll")

Все они возвращают ошибку исключения.NET. Есть ли способ определить путь, который использует LuaInterface?

2 ответа

Ваша сборка загружается исполняемым файлом вашего "хостинга" и не загружается самой средой Lua. luanet.load_assembly("MyAssembly") просто делает сборку доступной для среды Lua. Например (C#):

using MyAssembly; //you can't compile unless MyAssembly is available

namespace LuaRunner
{
    class LuaRunner
    {        
        void DoLua()
        {
            using (LuaInterface.Lua lua = new LuaInterface.Lua())
            {
                lua.DoString("luanet.load_assembly('MyAssembly')");
                //... do what you want within Lua with MyAssembly
            }
        }
    }
}

Ваша работающая программа является "хостом" для запуска Lua, так что именно ваша работающая программа действительно загружает MyAssembly, Вашему исполняемому файлу нужна ссылка на MyAssembly.dll (и он должен быть в состоянии найти его во время выполнения в обычных местах).

Для поиска других сборок установите package.cpath переменная. Например:

package.cpath = DATA_DIR .. "\\clibs\\?.dll;" .. package.cpath

Из документации Lua 5.1:

требуют (модмэйн)

Сначала требуются запросы package.preload[modname]. Если оно имеет значение, это значение (которое должно быть функцией) является загрузчиком. В противном случае требуется поиск загрузчика Lua с использованием пути, хранящегося в package.path. Если это также не удается, он ищет загрузчик C, используя путь, сохраненный в package.cpath.

package.cpath

Путь, используемый параметром require для поиска загрузчика C.

Lua инициализирует путь C package.cpath так же, как инициализирует путь Lua package.path, используя переменную среды LUA_CPATH или путь по умолчанию, определенный в luaconf.h.

Другие вопросы по тегам