将 ILMerge 与 IronPython 结合使用
我无法将 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 的模块”
在这两种情况下,我的脚本的第一行都会引发异常,这当然只是“导入 clr”。
I have trouble merging IronPython.dll, IronPython.Modules.dll, Microsoft.Dynamic.dll, Microsoft.Scripting.dll and Microsoft.Scripting.Metadata.dll into my application.
The first error i got while trying to execute a python script was:
MissingMemberException: "'NullImporter' object has no attribute 'find_module'"
This was resolved by omitting the /internalize Parameter of ILMerge. It seems that IronPython needs certain types to be public in order to function.
But it didn't help much, now i got:
ImportException: "No module named clr"
The exception in both cases is thrown for the first line of my script, which of course is just an "import clr".
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
遗憾的是,在 ILMerge 后工作时,像 IronPython 这样极其动态的运行时似乎是最不合作的。
您可能会考虑执行一些像 LINQPad 这样的单 exe 项目所做的程序集嵌入技巧。
ResolveEventHandler
注册 <代码>AppDomain.CurrentDomain.AssemblyResolve 事件。您可以按如下方式执行第 3 部分:
如果您需要更多帮助,您可以浏览 LINQPad.exe 并查看
LinqPad.Program.AddLINQPadAssemblyResolver()
和LinqPad.Program.FindAssem()
。更新:刚刚找到Jeffrey Richter 的博客文章 提供了有关此方法的更多详细信息。
Sadly, it seems like extremely dynamic runtimes such as IronPython are going to be the least cooperative when it comes to working after an ILMerge.
You might consider doing some of the assembly embedding tricks that single-exe projects like LINQPad do.
ResolveEventHandler
with theAppDomain.CurrentDomain.AssemblyResolve
event.You do part 3 as follows:
If you need more help, you can poke around in LINQPad.exe and look at
LinqPad.Program.AddLINQPadAssemblyResolver()
andLinqPad.Program.FindAssem()
.Update: Just found a blog post by Jeffrey Richter that gives more details on this approach.