gpt4 book ai didi

c# - 将 ILMerge 与 IronPython 结合使用

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:01 25 4
gpt4 key购买 nike

我无法将 IronPython.dll、IronPython.Modules.dll、Microsoft.Dynamic.dll、Microsoft.Scripting.dll 和 Microsoft.Scripting.Metadata.dll 合并到我的应用程序中。

我在尝试执行 python 脚本时遇到的第一个错误是:

MissingMemberException: "'NullImporter' object has no attribute 'find_module'"

这是通过省略 ILMerge 的/internalize 参数解决的。 IronPython 似乎需要公开某些类型才能运行。

但这并没有多大帮助,现在我得到了:

ImportException: "No module named clr"

在这两种情况下,我的脚本的第一行都会抛出异常,这当然只是一个“import clr”。

最佳答案

遗憾的是,在 ILMerge 之后工作时,IronPython 等极其动态的运行时似乎将成为最不合作的。

您可能会考虑使用像 LINQPad 这样的单 exe 项目所做的一些程序集嵌入技巧。

  1. 将您依赖的所有第三方程序集嵌入到应用程序的资源中。
  2. 注册ResolveEventHandler使用 AppDomain.CurrentDomain.AssemblyResolve 事件。
  3. 当您的处理程序使用您隐藏在资源中的程序集被调用时,加载该程序集。

您按如下方式执行第 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其中提供了有关此方法的更多详细信息。

关于c# - 将 ILMerge 与 IronPython 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8955268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com