我有一个用ironpython编写的应用程序,我想在其他PC上以.EXE分发。我一直在按照说明使用pyc.py,并且有些成功。我最终得到了一个包含的dir:
- 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计算机上失败的XP计算机上,我有一个.net配置文件:
<32Bit>
1.1.4322.2494
->C:WINDOWSMicrosoft.NETFrameworkv1.1.4322
2.0.50727.3634
->C:WINDOWSMicrosoft.NETFrameworkv2.0.50727
4.0.30319.269
->C:WINDOWSMicrosoft.NETFrameworkv4.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:WindowsMicrosoft.NETFrameworkv1.1.4322
2.0.50727.3634
->C:WindowsMicrosoft.NETFrameworkv2.0.50727
4.0.30319.269
->C:WindowsMicrosoft.NETFrameworkv4.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
看起来与我相同。
我真的不知道接下来要看什么;有线索吗?
杰夫·哈迪(Jeff Hardy)上面的评论是答案:获得错误的机器已经安装了ironpython的较旧版本,并且使用了这些组件,而不是在与本地元素中分布在同一dir中EXE文件。通过在有问题的机器上卸载Ironpython来解决。