2012-07-10 5 views
6

Estoy haciendo el ejemplo que se puede encontrar here. Así que estoy tratando de correr IronPython en un C# script:C# compilación dinámica y error "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"); 
       … 

Y a partir de aquí tengo este error: "Operación dinámica puede no ser compilado sin referencia de ensamblado "Microsoft.CSharp.dll". Y realmente no entiendo de qué se trata, ¿qué se me olvidó agregar?

En mis referencias que tengo: References of my project

Thx por su ayuda.

Ps: Estoy en MonoDevelop.

Respuesta

4

Ok. Básicamente, mi error estaba relacionado con el hecho de que agregué mis ensamblajes de IronPython desde la plataforma incorrecta. Compruebe que:

  • Marco Objetivo: 4.0

  • añadir todos los montajes proporcionados por IronPython en [IronPython-2.7.3] -> [plataformas] -> [Net40].

Gracias a todos los que me dieron consejos.

Ps: Ahora, por supuesto, hay otro problema ... Pero ya no se trata de ese tema.

+1

¡Asegúrese de marcar su propia respuesta como la solución para que los futuros visitantes puedan ver que ha resuelto el problema! También me complace que haya encontrado y haya elegido usar mi ejemplo :) – Urda

+0

Este también fue mi problema. Agregué mis referencias usando la pestaña ".NET" en Visual Studio C# 2010 Express. Creo que los archivos originales que aparecieron solo pueden haber sido del directorio 'Net35'. Tenga en cuenta la 'Ruta' en el cuadro de diálogo Agregar referencias. Cuando los agregué desde 'IronPython 2.7 \ Platforms \ Net40' la compilación tuvo éxito, y ambos conjuntos de ensamblajes ahora aparecen en la pestaña .Net en Agregar Referencias. (Esto puede haber sido el caso antes también, simplemente no me di cuenta). – cod3monk3y

2

Microsoft.CSharp.dll contiene la parte dinámica del compilador de C#. Cada vez que use dynamic en su código, necesita una referencia al mismo. No estoy familiarizado con MonoDevelop, pero probablemente tendrá que establecer el marco de destino en 4.0 y agregar una referencia al Microsoft.CSharp.dll en el proyecto (probablemente haga clic derecho en el proyecto, 'Agregar referencia', encuentre Microsoft.CSharp) .

Supongo que el proyecto que está utilizando se creó con una versión preliminar de VS y le faltan las referencias adecuadas.

+0

Hola, esto es exactamente lo que tengo: Framework 4.0, y como puede ver en la imagen Microsoft.CSharp ya está en mis referencias; esa es la razón por la cual no entiendo este error. Microsoft.CSharp se agrega en la referencia y sigue diciendo que no puedo compilar sin él ... ¿Crees que se deberían agregar otros ensamblados para que funcione? – ssx

+0

Oh, me perdí eso en la imagen. No estoy seguro de lo que está pasando entonces. Puede ser un problema de MonoDevelop. –

+0

Puede encontrar mi solución a continuación. Creo que estaba agregando ensamblajes incorrectos desde la plataforma. No tuve esos problemas con IronPython 2.7.0, así que cambié. – ssx

11

Esto es lo que me ayudó. Estoy usando Xamarian Studio v5.8.1 (compilación 8) para escribir un programa de C#. Simplemente tuve que hacer clic con el botón derecho en "Referencias" -> "Editar referencias" -> comencé a escribir "Microsoft" en la barra de búsqueda -> Marqué la casilla junto a "Microsoft.CSharp" -> y hice clic en "Aceptar".

Acabo de guardar y ejecutar el programa después de eso, ¡todo funciona como se esperaba!

Cuestiones relacionadas