0

我有一个用 IronPython 编写的应用程序,我想将它作为 .exe 分发到其他 PC 上。我一直按照此处的说明使用 pyc.py ,并且取得了一定的成功。我最终得到一个目录,其中包含:

  • my_app.exe
  • my_app.dll
  • StdLib.DLL [这包含标准 IronPython 库,如上面引用的 SO 帖子中所建议的]
  • IronPython.dll
  • IronPython.Modules.dll
  • Microsoft.Dynamic.dll
  • Microsoft.Scripting.dll
  • Microsoft.Scripting.Metadata.dll

我正在使用 IronPython 2.7.3;在我的开发机器上,我有 .NET 4.0.30319.17929。

我遇到的问题是,当我将上述内容分发到其他机器时,在某些机器上它运行良好,而在其他机器上我得到以下信息:

Unhandled Exception: System.MissingMethodException: Method not found: 'Int32 Iro
nPython.Runtime.Operations.PythonOps.InitializeModuleEx(System.Reflection.Assemb
ly, System.String, System.String[], Boolean)'.
   at PythonMain.Main()

它运行的机器包括 Windows 7 和 Windows XP 机器,它失败的机器还包括 Windows 7 和 Windows XP。我检查了 .NET 版本,比较了可以工作的机器和不工作的机器,我看不到任何明显的东西。例如,在失败的 XP 机器上,我有一个 .NET 配置文件:

<32Bit>
1.1.4322.2494
  ->C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
2.0.50727.3634
  ->C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
4.0.30319.269
  ->C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319

< Installed .NET Frameworks >
.NET FW 1.1 SP 1
.NET FW 2.0 SP 2
.NET FW 3.0 SP 2
.NET FW 3.5 SP 1
.NET FW 4.0 Client
.NET FW 4.0 Full

在运行良好的 XP 机器上,我有一个 .NET 配置文件:

<32Bit>
1.1.4322.2494
  ->C:\Windows\Microsoft.NET\Framework\v1.1.4322
2.0.50727.3634
  ->C:\Windows\Microsoft.NET\Framework\v2.0.50727
4.0.30319.269
  ->C:\Windows\Microsoft.NET\Framework\v4.0.30319

< Installed .NET Frameworks >
.NET FW 1.1 SP 1
.NET FW 2.0 SP 2
.NET FW 3.0 SP 2
.NET FW 3.5 SP 1
.NET FW 4.0 Client
.NET FW 4.0 Full

这看起来和我一模一样。

我真的不知道接下来该看什么;任何线索?

4

1 回答 1

0

上面 Jeff Hardy 的评论就是答案:出现错误的机器已经安装了旧版本的 IronPython,并且使用的是这些程序集,而不是与 exe 分布在同一目录中的本地程序集。通过在有问题的机器上卸载 IronPython 来解决。

于 2012-11-07T10:56:47.770 回答