【发布时间】:2013-12-30 03:34:36
【问题描述】:
我有一个嵌入 IronPython 并使用它来执行用户编写的脚本的应用程序。当只安装我的应用程序时,一切都按预期工作。我已经嵌入 IronPython 2.7.4 dll(我的 exe 和 IronPython dll 安装后在同一个文件夹中)。
但是,在某些客户端计算机上安装了 IronPython 2.7.2。它将其 dll 安装到 GAC 中,我的应用程序最终使用它们,而不是我随应用程序和应用程序一起提供的 dll。这会导致我的应用程序失败,因为我使用了 2.7.2 中不可用的属性。
问题是 .NET 出于某种原因将这些程序集视为具有相同版本 (2.7.0.40)。如下图所示/文件版本不同:
右一个是我的应用程序附带的一个,左一个是 IronPython 2.7.2 附带的一个。我没有向 GAC 注册任何内容,但这是在 GAC 中注册的内容(IronPython 安装添加了它):
C:\ $ gacutil /l | findstr IronPython
IronPython, Version=2.7.0.40, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL
IronPython.Modules, Version=2.7.0.40, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL
如您所见,它们已注册为 2.7.0.40 版本。
我的问题是 - 如何强制我的应用程序使用 IronPython 程序集的 2.7.4.1000 版本,而不是在 GAC 中注册的 2.7.2.1001?为什么 .NET 忽略版本号的第三部分,可以更改吗?
编辑:
如果它很重要,安装 IronPython 2.7.2 后,我的程序将失败并出现以下错误:
未处理的异常:System.MissingMethodException:找不到方法:'Boolean IronPython.Hosting.PythonConsoleOptions.get_BasicConsole()'。
【问题讨论】:
-
IronPython (3.0) 的未来版本还将包括未签名的程序集,以包含在可避免此问题的应用程序中。
-
感谢评论,我期待 IronPython 3.0。
标签: c# .net dll ironpython