我无法将IronPython.dll,IronPython.Modules.dll,Microsoft.Dynamic.dll,Microsoft.Scripting.dll和Microsoft.Scripting.Metadata.dll合并到我的应用程序中。
我在尝试执行python脚本时遇到的第一个错误是:
MissingMemberException:“'NullImporter'对象没有属性'find_module'”
通过省略ILMerge的/ internalize参数解决了这个问题。似乎IronPython需要某些类型才能公开才能运行。
但它没有多大帮助,现在我得到了:
ImportException:“没有名为clr的模块”
我的脚本的第一行抛出了两种情况下的异常,当然这只是一个“import clr”。
答案 0 :(得分:2)
可悲的是,在ILMerge之后工作时,像IronPython这样极其动态的运行时似乎是最不合情合理的。
你可能会考虑做一些像LINQPad那样的单一exe项目的程序集嵌入技巧。
AppDomain.CurrentDomain.AssemblyResolve
活动中注册ResolveEventHandler
。您按照以下方式执行第3部分:
var resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(name);
return Assembly.Load(new BinaryReader(resourceStream).ReadBytes(int.MaxValue));
如果您需要更多帮助,可以在LINQPad.exe中查看并查看LinqPad.Program.AddLINQPadAssemblyResolver()
和LinqPad.Program.FindAssem()
。
更新:刚刚找到a blog post by Jeffrey Richter,提供了有关此方法的更多详细信息。