2010-03-03 12 views
7

मैं सी # और एफ # दोनों में कुछ प्रोग्राम करना चाहता हूं। मेरे पास आंशिक कक्षाएं हैं और मैं उनमें से कुछ में एफ # विधियों को परिभाषित करना चाहता हूं। मुझे यह मुद्दा मिलता है कि आंशिक वर्ग 2 डीएलएल में फैला नहीं जा सकता है। क्या कोई तरीका है कि मैं उन्हें विलय कर सकता हूं? मैं एक मुफ्त समाधान और सामान्य निर्माण में इसे स्वचालित रूप से करने की क्षमता पसंद करता हूं।एक साथ कई .NET बाइनरी मर्ज करें?

उत्तर

5

मैंने पहले से ही इस तरह का अनुरोध किया है, ऐसा लगता है कि अधिक लोग ऐसा करना चाहते हैं। हालांकि, जैसा कि पहले से ही कहा गया है, यह संभव नहीं है। आप कई असेंबली (अलग-अलग वर्गों के साथ) मर्ज करने के लिए ILMerge का उपयोग कर सकते हैं, लेकिन एक अलग भाषा में कक्षा के विभिन्न हिस्सों को लिखना संभव नहीं है। आपको प्राप्त करने वाला एकमात्र उत्तर यह है कि आपको अपने कोड को अलग-अलग ढांचे की आवश्यकता होगी। वहाँ कई विकल्प हैं:

  • कार्यों कि भागों आप एफ # में क्या
  • एफ # में सदस्यों के साथ घोषित प्रकार और उसके बाद सी #
  • से इन कक्षाओं का उपयोग करना चाहते contian के साथ एक एफ # मॉड्यूल घोषित एक आधार वर्ग घोषित सी # (या एफ #) में और विरासत वर्ग बनाते हैं जो अन्य भाषा में शेष कार्यक्षमता जोड़ता है।

किसी भी मामले में, आपको किसी भी तरह से कार्यक्षमता को कम करने की आवश्यकता होगी (जो तकनीकी आवश्यकता है और मुझे विश्वास है कि यह आपके कोड को और अधिक पठनीय बनाने में भी मदद करेगा)।

प्रदर्शित करने के लिए क्यों कई विधानसभाओं भर में आंशिक वर्गों काम नहीं कर सकते हैं:

// C# part 
partial class Foo { 
    private int csharpField; 
    int Bar() { return FSharpMethod(); } 
} 

// F# part 
type Foo = 
    member x.FSharpMethod() = x.csharpField 

इस उदाहरण में, सी # कोड संकलन नहीं कर सकते, क्योंकि यह पता नहीं है FSharpMethod मौजूद है और उसके प्रकार क्या है या नहीं। एफ # कंपाइलर कोड को संकलित नहीं कर सकता है, क्योंकि यह नहीं जानता कि csharpField (और यह मौजूद है या नहीं) का प्रकार क्या है।

बेशक, यह केवल एक तकनीकी समस्या का एक उदाहरण है, लेकिन उनमें से कई होंगे - यदि आप इसका समर्थन करना चाहते हैं तो आप आसानी से कई अन्य समस्याओं की कल्पना कर सकते हैं (और ऐसा लगता है कि दो कंपाइलर दूसरे के इंटर्नल्स से अवगत होना चाहिए)।

+0

हेनक होल्टरमैन में किए गए टिप्पणियों के अतिरिक्त कारण हैं कि यह काम क्यों नहीं करेगा। –

6

आप विभिन्न भाषाओं में कक्षा के विभिन्न हिस्सों को नहीं लिख सकते हैं।

आप क्या करने की कोशिश कर रहे हैं?

आप अलग एफ # लाइब्रेरी में विधियों का पर्दाफाश कर सकते हैं और उन्हें सी # में कक्षा से कॉल कर सकते हैं।
फिर आप दो विधानसभाओं को मर्ज करने के लिए ILMerge का उपयोग कर सकते हैं।

+0

इसे कम करने से पहले, ध्यान दें कि ILMerge बिल्कुल मदद नहीं करेगा। – SLaks

+0

मेरे पास डेटाबेस कनेक्शन और useridFromName सत्यापित यूज़र (और व्यवस्थापक) जैसी अन्य महान चीज़ों के साथ एक मूल उपयोगकर्ता श्रेणी है। मुझे एफ # में कुछ फ़ंक्शन चाहिए जो उन कार्यों में से कई का उपयोग करता है (आमतौर पर वे आंशिक वर्ग का हिस्सा होते हैं) और मैं एफ # में लिखने के तरीकों को लिखना चाहता हूं जब तक कि यह मेरे लिए बहुत जटिल न हो जो मैं सी # में करूँगा और थोड़ा विकास समय खोना। –

+0

क्या यह ildasm-> विलय-> ilasm के साथ काम नहीं करेगा? – Vlad

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