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
требуют (модмэйн)
Сначала требуются запросы package.preload[modname]. Если оно имеет значение, это значение (которое должно быть функцией) является загрузчиком. В противном случае требуется поиск загрузчика Lua с использованием пути, хранящегося в package.path. Если это также не удается, он ищет загрузчик C, используя путь, сохраненный в package.cpath.
package.cpath
Путь, используемый параметром require для поиска загрузчика C.
Lua инициализирует путь C package.cpath так же, как инициализирует путь Lua package.path, используя переменную среды LUA_CPATH или путь по умолчанию, определенный в luaconf.h.