2012-07-10 10 views
6

Robię przykład, który można znaleźć here. Więc próbuję uruchomić IronPython w skrypcie C#:Kompilacja dynamiczna C# i błąd "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"); 
       … 

I stąd mam ten błąd: „Dynamic Operacja nie może być skompilowane bez odwołania do zestawu "Microsoft.CSharp.dll". " I naprawdę nie rozumiem, o co chodzi, co zapomniałem dodać?

W moich odniesień mam: References of my project

thx za pomoc.

Ps: Jestem na MonoDevelop.

Odpowiedz

4

Ok. Zasadniczo mój błąd był związany z faktem, że dodałem moje zestawy IronPython z niewłaściwej platformy. Sprawdź, czy:

  • Framework docelowa: 4,0

  • Dodaj wszystkie podzespoły dostarczane przez IronPython w [IronPython-2.7.3] -> [platformy] -> [Net40].

Thx wszystkim, którzy udzielili mi porad.

Ps: Teraz, oczywiście, jest inny problem ... Ale już nie o tym temacie.

+1

Upewnij się, że oznaczasz własną odpowiedź jako rozwiązanie, aby przyszli użytkownicy mogli zobaczyć, jak rozwiązałeś problem! Również cieszę się, że znalazłeś i wybrałeś mój przykład :) – Urda

+0

To też był mój problem. Dodałem moje referencje za pomocą karty ".NET" w Visual Studio C# 2010 Express. Myślę, że oryginalne pliki, które się pojawiły, mogły pochodzić tylko z katalogu 'Net35'. Zwróć uwagę na 'Path' w oknie dialogowym Add References. Kiedy dodałem je z 'IronPython 2.7 \ Platforms \ Net40', kompilacja się powiodła i oba zestawy złożeń są teraz wyświetlane na karcie .Net w Dodaj odniesienia. (Mogło tak być również wcześniej, po prostu nie zauważyłem). – cod3monk3y

2

Microsoft.CSharp.dll zawiera dynamiczną część kompilatora C#. Za każdym razem, gdy używasz kodu dynamic, potrzebujesz referencji do niego. Nie jestem zaznajomiony z MonoDevelop, ale prawdopodobnie będziesz musiał ustawić docelowy framework na 4.0 i dodać odniesienie do Microsoft.CSharp.dll do projektu (prawdopodobnie kliknięcie prawym przyciskiem myszy projektu, "Dodaj referencję", znajdź Microsoft.CSharp) .

Domyślam się, że projekt, którego używasz został utworzony z wersją wstępną VS i brakuje odpowiednich odniesień.

+0

Witam, to jest dokładnie to, co mam: Framework 4.0, i jak widać na obrazie Microsoft.CSharp jest już w moich referencjach; to jest powód, dla którego nie rozumiem tego błędu. Microsoft.CSharp jest dodany w odnośniku i nadal mówi, że nie mogę się bez niego skompilować ... Czy sądzisz, że inne podzespoły również powinny zostać dodane, aby działało? – ssx

+0

Och, tęskniłem za tym na obrazie. Nie jestem pewien, co się dzieje. Może to być problem MonoDevelop. –

+0

Możesz znaleźć moje rozwiązanie poniżej. Myślę, że dodawałem złe zestawy z platformy From. Nie mam takich problemów z IronPythonem 2.7.0, więc przełączyłem się. – ssx

11

To mi pomogło. Używam Xamarian Studio v5.8.1 (kompilacja 8) do napisania programu C#. Wystarczyło kliknąć prawym przyciskiem myszy "References" -> "Edit References" -> zacząłem wpisywać "Microsoft" w pasku wyszukiwania -> zaznaczyłem pole obok "Microsoft.CSharp" -> i kliknąłem "OK".

Po prostu zapisałem i uruchomiłem program - wszystko działa zgodnie z oczekiwaniami!