Ich habe IronPython auf mono 2.8 mit dem Code aus dem Buch getestet Professionelles IronPython S.315 Liste 15-3.
using System;
using IronPython.Hosting;
using IronPython.Runtime;
using Microsoft.Scripting.Hosting;
namespace Method2
{
class Program
{
static void Main(string[] args)
{
// Obtain the runtime.
var IPY = Python.CreateRuntime();
// Create a dynamic object containing the script.
dynamic TestPy = IPY.UseFile("TestClass.py");
// Execute the __test__() method.
TestPy.__test__();
}
}
}
Ich sehe, es ist OK kompiliert, und laufen ohne ein Problem auf Windows 7, während die mono 2.8 gibt mir die folgende Fehlermeldung.
Unhandled Exception: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:
\`Microsoft.Scripting.Hosting.ScriptScope' does not contain a definition for \`\_\_test\_\_'
at (wrapper dynamic-method) object.CallSite.Target (System.Runtime.CompilerServices.Closure,System.Runtime.CompilerServices.CallSite,object)
at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid1
(System.Runtime.CompilerServices.CallSite,object)
at Method2.Program.Main (string\[\])
Ich dachte, Mono 2.8 unterstützt C# 4.0, die das dynamische Schlüsselwort hat, aber ich sehe, dass das "dynamische" Schlüsselwort nicht vollständig mit Mono unterstützt wird.
Ist dies ein Fehler von Mono 2.8?
HINZUFÜGEN
Dies ist das Python-Skript.
# The class you want to access externally.
class DoCalculations():
# A method within the class that adds two numbers.
def DoAdd(self, First, Second):
# Provide a result.
return First + Second
# A test suite in IronPython.
def __test__():
# Create the object.
MyCalc = DoCalculations()
# Perform the test.
print MyCalc.DoAdd(5, 10)
# Pause after the test session.
raw_input('\nPress any key to continue...')
Der von mir verwendete Befehl lautet wie folgt
dmcs Program.cs /r:System.Core /r:IronPython.dll /r:IronPython.Modules.dll /r:Microsoft.Dynamic.dll /r:Microsoft.Scripting.dll /r:Microsoft.CSharp.dll
Es lässt sich zwar gut kompilieren, aber wenn ich die ausführbare Binärdatei ausführe, bricht es trotzdem ab. Müssen sich alle Dlls im selben Verzeichnis befinden, in dem auch das Execution Binary liegt?