我试图在微软Visual Studio 2017社区中以窗口形式使用Pythonnet运行Visbrain,但我遇到了下面的一些问题。
环境
1)Pythonnet版本:v2.3.0
我从Visual Studio 2017社区的“Manage Nuget Package”下载了这个。
2)Python版本:Python 3.6.5(amaconda3)
已经在环境中pip install pythonnet
3)操作系统:Window 7,64位
4).net框架:4.0
===
尝试运行以下代码:

private static void button_Click(object sender, EventArgs e)
{
    using (Py.GIL())
    {
         dynamic myVisbrain = Py.Import("Visbrain");
    }
}

调试时
来自program.cs
Application.Run(new Form1()); // crashes here

错误消息:
Exception thrown: 'System.BadImageFormatException' in System.Windows.Forms.dll
An unhandled exception of type 'System.BadImageFormatException' occurred in System.Windows.Forms.dll
Could not load file or assembly 'Python.Runtime, Version=2.3.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.

堆栈跟踪:
System.BadImageFormatException
  HResult=0x8007000B
  Message=Could not load file or assembly 'Python.Runtime, Version=2.3.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.
  Source=WindowsFormsAppJTTH
  StackTrace:
   at WindowsFormsAppJTTH.Form1.button1_Click(Object sender, EventArgs e) in C:\Users\Administrator\source\repos\WindowsFormsAppJTTH\WindowsFormsAppJTTH\Form1.cs:line 219
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at WindowsFormsAppJTTH.Program.Main() in C:\Users\Administrator\source\repos\WindowsFormsAppJTTH\WindowsFormsAppJTTH\Program.cs:line 19

想问一下,这里有什么问题,怎么解决。谢谢您。

最佳答案

检查“Python.Runtime”的引用
它可能指向32位版本,而您使用的是64位版本

\packages\pythonnet_py27_dotnet.2.3.0\lib\net40\x86\Python.Runtime.dll

把它改成
\packages\pythonnet_py27_dotnet.2.3.0\lib\net40\x64\Python.Runtime.dll

应用程序应该可以工作。

关于c# - Visual Studio 2017中的Pythonnet,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51845263/

10-09 13:27