我使用带有WPF的IronPython 2.7开发了一个使用VS2017的应用程序,使用ipy命令可以正常工作。我想从项目创建一个exe文件,所以我在cmd中使用了以下命令:
ipy pyc.py /main:IronPython5.py /target:winexe
包含所有相关DLL的项目的XAML文件位于deploy文件夹中但是,我得到以下错误,我无法理解其含义:
Traceback (most recent call last):
File "pyc.py", line 332, in <module>
File "pyc.py", line 327, in Main
File "pyc.py", line 181, in GenerateExe
SystemError: Ambiguous match found.
Ironpython5.py包含:
import wpf
from System.Windows import MessageBox
from System.Windows import Application, Window
class MyWindow(Window):
def __init__(self):
self.str1 = ""
wpf.LoadComponent(self, 'IronPython5.xaml')
def Button_Click(self, sender, e):
if self.str1 == "":
MessageBox.Show("msg1")
else:
MessageBox.Show("msg2")
pass
if __name__ == '__main__':
Application().Run(MyWindow())
以及IronPython5.py包含:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="IronPython5" Height="300" Width="300">
<Grid>
<Button Content="Button" HorizontalAlignment="Left" Margin="159,238,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
</Grid>
</Window>
dll文件是:
请帮我解决如何修复此错误以生成exe文件。
答案 0 :(得分:4)
我刚刚按照this solution提供的一些提示运行了我的示例WPF IronPython项目,但我使用了ipyc.exe来编译它,这是我的IronPython 2.7.7安装附带的。
为了在最终的可执行文件中拥有所有依赖项,您必须手动加载它们。
请注意,如果没有try / except块,这将无法在Visual Studio中运行,因为VS可能已经添加了这些
import clr
try:
clr.AddReferenceToFileAndPath("IronPython.Wpf.dll")
clr.AddReferenceToFileAndPath('PresentationCore.dll')
clr.AddReferenceToFileAndPath('PresentationFramework.dll')
clr.AddReferenceToFileAndPath('WindowsBase.dll')
except:
pass
from System.Windows import Application, Window
import wpf
class MyWindow(Window):
def __init__(self):
wpf.LoadComponent(self, 'Wpf_Example.xaml')
if __name__ == '__main__':
Application().Run(MyWindow())
然后将dll添加到项目文件夹中。它们可以在这里找到:C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \
用ipyc编译
ipyc Wpf_Example.py /target:winexe
注意拨打ipyc的不同方式!如果使用/ main:选项,它将无法工作!