我正在尝试使用LuaInterface加载.net程序集。如果我将程序集放在与我的可执行文件(以及我的LuaInterface.dll和LuaNet.dll)相同的文件夹中,那么一切都会正常工作。我想将程序集移动到不同的文件夹中,但当我尝试这样做时,我得到了"A .NET exception occured in user-code“。我试过了:
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使用的路径?
发布于 2013-01-08 03:05:21
您的程序集是由“宿主”可执行文件加载的,而不是真正由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的引用(并且需要能够在运行时在通常的位置找到它)。
发布于 2015-02-12 21:40:40
若要搜索其他程序集,请设置package.cpath变量。例如:
package.cpath = DATA_DIR .. "\\clibs\\?.dll;" .. package.cpath从Lua 5.1 documentation
必需(modname)
首先需要查询package.preloadmodname。如果它有一个值,这个值(应该是一个函数)就是加载器。否则,需要使用存储在package.path中的路径搜索Lua加载器。如果同样失败,它将使用存储在package.cpath中的路径搜索C加载器。
package.cpath
搜索C加载器所使用的路径。
Lua初始化C路径package.cpath的方式与初始化Lua路径package.path的方式相同,使用环境变量LUA_CPATH或在luaconf.h.中定义的默认路径
https://stackoverflow.com/questions/13806936
复制相似问题