2009-01-21 5 views
26

यह कैसे करें? क्या एक अलग डीएल फ़ाइल या प्रोजेक्ट का उपयोग किये बिना एक एफ # कोड से सी # में फ़ंक्शन को कॉल करना संभव है?क्या एक एकल विजुअल स्टूडियो विंडोज कंसोल प्रोजेक्ट में .cs (सी #) और .fs (F #) फ़ाइलों को मिश्रण करना संभव है? (.NET)

उत्तर

21

आप एक ही प्रोजेक्ट में दो अलग-अलग भाषाओं को शामिल नहीं कर सकते हैं, लेकिन आप उन्हें ilmerge का उपयोग करके मर्ज कर सकते हैं। ऐसा करने के लिए, दोनों परियोजनाओं को एक ही समाधान में रखें और एफ # मॉड्यूल को संदर्भित करें क्योंकि आप किसी भी डीएलएल करेंगे। अपनी परिनियोजन स्क्रिप्ट के हिस्से के रूप में, exe फ़ाइल और dll फ़ाइल को एक exe फ़ाइल में गठबंधन करने के लिए ilmerge चलाएं। यह Code Project आलेख देखें जो वर्णन करता है कि एक exe बनाने के लिए ilmerge का उपयोग कैसे करें।

+2

एफ # का स्थैतिक लिंक स्विच इतनी ही चीज के रूप में। – Robert

12

नहीं। यदि आप एकल .exe का उत्पादन करना चाहते हैं तो आप इनमें से कुछ f # static लिंक विकल्पों का उपयोग कर सकते हैं F # --full-help comandline इन का अधिक विवरण के स्विच का उपयोग करें।

15

एक ही परियोजना में सी # और एफ # मिश्रण करने में सक्षम नहीं है एक समस्या पैदा करता है; यह दोनों परियोजनाओं के बीच परिपत्र निर्भरता की ओर जाता है। संकल्पनात्मक रूप से केवल एक ही परियोजना है जिसमें दो भाषाएं हैं, लेकिन जिस तरह से विजुअल स्टूडियो परियोजनाओं का प्रबंधन करता है, भाषाओं को मिश्रित नहीं किया जा सकता है, जिससे परिपत्र निर्भरताएं होती हैं।

अब के लिए एकमात्र समाधान मैं इसे तीसरे प्रोजेक्ट में कई इंटरफेस बनाने के लिए देखता हूं और परियोजना में से एक असली परियोजना के बजाय इंटरफेस प्रोजेक्ट का संदर्भ देता है। क्या कोई बेहतर तरीका है?

सधन्यवाद, निक

+6

एक्सेलेंट टिप्पणी और प्रश्न, लेकिन जब तक आप इसे एक प्रश्न के रूप में पोस्ट नहीं करते हैं तब तक आपको अधिक ध्यान नहीं मिलेगा। –

+4

+1 मैंने एक ही असेंबली में सी # और एफ # प्राप्त करने के लिए आईएलएमर्ज का उपयोग करने के लिए कई वाणिज्यिक परियोजनाओं का सहारा देखा है। माइक्रोसॉफ्ट को आईएलएमर्ज को सही तरीके से समर्थन देना चाहिए और इसे एक कर्मचारी को अल्फा रिलीज सॉफ़्टवेयर डालने के बजाय विजुअल स्टूडियो में एम्बेड करना चाहिए। –

6

आप एक सी # परियोजना में एफ # स्रोत फ़ाइलें (.fs) संकलन नहीं कर सकते, लेकिन आप को जोड़ने के एफ # स्क्रिप्ट फ़ाइलें (.fsx) जो आप संदर्भ के लिए उपयोग कर सकते हैं और खोज कर सकते हैं एफ # से सी # परियोजना की विधानसभा इंटरैक्टिव:

public static class Math 
{ 
    public static double PowN(double d, int n) 
    { 
     var result = 1; 
     for (int i = 0; i < n; i++) result *= d; 
     return result; 
    } 
} 

एफ # स्क्रिप्ट फ़ाइल (.fsx):

#r "bin\debug\ClassLibrary1.dll" 

Math.PowN(2.0,3) 
0

अपने एफ # कोड संकलित करें, (किसी भी उपकरण के साथ "डिकंपाइल" परावर्तक की तरह, मैं lspy) से सी # कोड, इसे एक परियोजना में शामिल करें -> लाभ!

संबंधित मुद्दे