2012-07-10 14 views
6

मैं उदाहरण कर रहा हूं जो here पाया जा सकता है।सी # गतिशील संकलन और "माइक्रोसॉफ्ट.CSharp.dll" त्रुटि

पायथन: तो मैं एक सी # लिपि में IronPython को चलाने के लिए कोशिश कर रहा हूँ

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 

सी #:

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"); 
       … 

और यहाँ से मैं इस त्रुटि है: "गतिशील ऑपरेशन नहीं किया जा सकता "माइक्रोसॉफ्ट.CSharp.dll" असेंबली संदर्भ के बिना संकलित। " और मैं गंभीरता से समझ नहीं पा रहा हूं कि इसके बारे में क्या है, मैं क्या जोड़ना भूल गया?

मेरे संदर्भ में मेरे पास है: आपकी मदद के लिए References of my project

Thx।

Ps: मैं मोनो डेवलपमेंट पर हूं।

उत्तर

4

ठीक है। असल में, मेरी गलती इस तथ्य से जुड़ी हुई थी कि मैंने गलत प्लेटफ़ॉर्म से अपनी आयरनपीथन असेंबली को जोड़ा। सत्यापित करें कि:

  • लक्ष्य फ्रेमवर्क: 4,0

  • सभी में IronPython द्वारा प्रदान की विधानसभाओं जोड़ें [IronPython-2.7.3] -> [प्लेटफार्म] -> [Net40]।

मुझे सलाह देने वाले सभी लोगों के लिए Thx।

Ps: अब, ज़ाहिर है, एक और समस्या है ... लेकिन यह अब उस विषय के बारे में नहीं है।

+1

सुनिश्चित करें कि आप समाधान के रूप में अपना उत्तर ध्वजांकित करें ताकि भविष्य के आगंतुक आपको समस्या हल कर सकें! इसके अलावा मुझे खुशी है कि आपने पाया और मेरे उदाहरण का उपयोग करना चुना :) – Urda

+0

यह मेरी समस्या भी थी। मैंने विजुअल स्टूडियो सी # 2010 एक्सप्रेस में ".NET" टैब का उपयोग करके मेरे संदर्भ जोड़े थे। मुझे लगता है कि दिखाई देने वाली मूल फ़ाइलें केवल 'नेट 35' निर्देशिका से ही हो सकती हैं। जोड़ें संदर्भ संवाद बॉक्स में 'पथ' से अवगत रहें। जब मैंने उन्हें 'आयरनपीथन 2.7 \ प्लेटफार्म \ नेट 40' से जोड़ा, तो बिल्ड सफल हो गया, और असेंबली के दोनों सेट अब संदर्भ संदर्भ में नेट टैब पर दिखाई देते हैं। (यह पहले भी मामला हो सकता है, मैंने अभी ध्यान नहीं दिया)। – cod3monk3y

2

Microsoft.CSharp.dll में सी # कंपाइलर का गतिशील भाग शामिल है। जब भी आप अपने कोड में dynamic का उपयोग करते हैं, तो आपको इसके संदर्भ की आवश्यकता होती है। मैं मोनो डेवलप से परिचित नहीं हूं, लेकिन आपको शायद लक्ष्य ढांचे को 4.0 पर सेट करना होगा, और प्रोजेक्ट में Microsoft.CSharp.dll का संदर्भ जोड़ना होगा (शायद प्रोजेक्ट पर राइट-क्लिक करें, 'संदर्भ जोड़ें', माइक्रोसॉफ्ट को ढूंढें .CSharp) ।

मेरा अनुमान है कि आप जिस परियोजना का उपयोग कर रहे हैं वह वीएस के प्री-रिलीज संस्करण के साथ बनाया गया था, और उचित संदर्भ गायब है।

+0

हाय, यह वही है जो मेरे पास है: फ्रेमवर्क 4.0, और जैसा कि आप छवि में देखते हैं Microsoft.CSharp पहले से ही मेरे संदर्भ में है; यही कारण है कि मैं इस त्रुटि को समझ नहीं पा रहा हूं। माइक्रोसॉफ्ट.एससीएचआरपी संदर्भ में जोड़ा गया है और यह अभी भी कह रहा है कि मैं इसके बिना संकलित नहीं कर सकता ... क्या आपको लगता है कि अन्य असेंबली को इसे काम करने के लिए भी जोड़ा जाना चाहिए? – ssx

+0

ओह, मुझे उस छवि में याद आया। मुझे यकीन नहीं है कि तब क्या हो रहा है। यह एक मोनो डेवलपमेंट मुद्दा हो सकता है। –

+0

आप मेरा समाधान देख सकते हैं। मुझे लगता है कि मैं मंच से गलत असेंबली जोड़ रहा था। IronPython 2.7.0 के साथ ऐसी कोई समस्या नहीं आई, इसलिए मैंने स्विच किया। – ssx

11

यही मेरी मदद करता है। मैं सी # प्रोग्राम लिखने के लिए एक्समेरियन स्टूडियो v5.8.1 (बिल्ड 8) का उपयोग कर रहा हूं। मुझे बस "संदर्भ" पर राइट क्लिक करना था -> "संदर्भ संपादित करें" -> खोज बार में "माइक्रोसॉफ्ट" टाइप करना शुरू किया -> "माइक्रोसॉफ्ट.CSharp" -> के बगल में स्थित बॉक्स को चेक किया गया और "ठीक" पर क्लिक किया।

मैंने अभी सहेजा और उसके बाद कार्यक्रम चलाया - सब कुछ अपेक्षित काम करता है!