2012-07-10 23 views
6

Sto facendo l'esempio che può essere trovato here. Così sto cercando di eseguire IronPython in uno script C#:Compilazione dinamica C# e errore "Microsoft.CSharp.dll"

Python:

def hello(name): 
    print "Hello " + name + "! Welcome to IronPython!" 
    return 

def add(x, y): 
    print "%i + %i = %i" % (x, y, (x + y)) 
    return 

def multiply(x, y): 
    print "%i * %i = %i" % (x, y, (x * y)) 
    return 

C#:

using IronPython.Hosting; 
using IronPython.Runtime; 
using Microsoft.Scripting.Hosting; 
using System; 

namespace IntroIronPython 
{ 
    class IronPythonMain 
    { 
     static void Main(string[] args) 
     { 
      // Create a new ScriptRuntime for IronPython 
      Console.WriteLine("Loading IronPython Runtime..."); 
      ScriptRuntime python = Python.CreateRuntime(); 

      try 
      { 
       // Attempt to load the python file 
       Console.WriteLine("Loading Python File..."); 
       // Create a Dynamic Type for our Python File 
       dynamic pyfile = python.UseFile("PythonFunctions.py"); 
       Console.WriteLine("Python File Loaded!"); 

       Console.WriteLine("Running Python Commands...\n"); 

       // Call the hello(name) function 
       pyfile.hello("Urda"); 
       … 

E da qui ho questo errore: "Operazione dinamico non può essere compilato senza riferimento all'assembly "Microsoft.CSharp.dll". " E seriamente non capisco di cosa si tratta, cosa ho dimenticato di aggiungere?

Nei miei riferimenti che ho: References of my project

Thx per il vostro aiuto.

Ps: Sono su MonoDevelop.

risposta

4

Ok. Fondamentalmente, il mio errore era legato al fatto che ho aggiunto i miei assembly IronPython dalla piattaforma sbagliata. Verificare che:

  • target quadro: 4.0

  • aggiungere tutti i gruppi forniti da IronPython in [IronPython-2.7.3] -> [piattaforme] -> [Net40].

Thx a tutti coloro che mi hanno dato consigli.

Ps: Ora, naturalmente, c'è un altro problema ... Ma non si tratta più di quell'argomento.

+1

Assicurati di contrassegnare la tua risposta come soluzione in modo che i futuri visitatori possano vedere che hai risolto il problema! Inoltre sono contento che tu abbia trovato e scelto di usare il mio esempio :) – Urda

+0

Questo era il mio problema. Ho aggiunto i miei riferimenti utilizzando la scheda ".NET" in Visual Studio C# 2010 Express. Penso che i file originali che sono apparsi potrebbero essere stati solo dalla directory 'Net35'. Sii consapevole del 'Percorso' nella finestra di dialogo Aggiungi riferimenti. Quando li ho aggiunti da "IronPython 2.7 \ Platforms \ Net40' la generazione è riuscita, ed entrambi i gruppi di assiemi ora appaiono nella scheda .Net in Aggiungi riferimenti. (Anche questo potrebbe essere stato il caso prima, non me ne sono accorto). – cod3monk3y

2

Microsoft.CSharp.dll contiene la parte dinamica del compilatore C#. Ogni volta che si utilizza dynamic nel codice, è necessario un riferimento ad esso. Non ho familiarità con MonoDevelop, ma probabilmente dovrai impostare il framework di destinazione su 4.0 e aggiungere un riferimento a Microsoft.CSharp.dll al progetto (probabilmente fai clic con il tasto destro del mouse sul progetto, "Aggiungi riferimento", trova Microsoft.CSharp) .

La mia ipotesi è che il progetto che si sta utilizzando sia stato creato con una versione pre-release di VS e che manchi i riferimenti corretti.

+0

Ciao, questo è esattamente quello che ho: Framework 4.0, e come vedi nell'immagine Microsoft.CSharp è già nei miei riferimenti; questo è il motivo per cui non capisco questo errore. Microsoft.CSharp viene aggiunto nel riferimento e dice ancora che non posso compilare senza di esso ... Pensi che altri assembly dovrebbero essere aggiunti per farlo funzionare? – ssx

+0

Oh, l'ho perso nell'immagine. Non sono sicuro di cosa stia succedendo allora. Potrebbe essere un problema di MonoDevelop. –

+0

Puoi trovare la mia soluzione qui sotto. Penso che stavo aggiungendo gli assembly errati dalla piattaforma. Non ho avuto problemi di questo tipo con IronPython 2.7.0, quindi sono passato. – ssx

11

Questo è ciò che mi ha aiutato. Sto usando Xamarian Studio v5.8.1 (build 8) per scrivere un programma C#. Dovevo semplicemente fare clic con il pulsante destro del mouse su "Riferimenti" -> "Modifica riferimenti" -> iniziato a digitare "Microsoft" nella barra di ricerca -> Selezionata la casella accanto a "Microsoft.CSharp" -> e fatto clic su "OK".

Ho appena salvato ed eseguito il programma dopo che - tutto funziona come previsto!