2010-06-28 9 views
10

मैं सी # से कुछ एफ # प्रकार (Matrix एट अल) का उपयोग कर रहा हूं और इसलिए मुझे अपने सी # प्रोजेक्ट में FSharp.Core असेंबली का संदर्भ देने की आवश्यकता है। अब तक सब ठीक है.एक सी # प्रोजेक्ट में FSharp.Core सहित: हल करने वाले प्रकार टकराव

हालांकि, स्पष्ट रूप से mscorlib.dll (v4) में परिभाषित कुछ प्रकार हैं जो FSharp.Core (v2) में "डुप्लीकेट" हैं, जैसे System.Tuple और System.IObservable। मैं नहीं समझ सकता क्यों यह नेट 4 में है Matt Ellis specifically said they would be removed in his MSDN article:

One language suffering that [duplication] problem was F#, which previously had defined its own tuple type in FSharp.Core.dll but will now use the tuple added in Microsoft .NET Framework 4.

मैं इस विशेष अनुचित दोहराव अतीत देखने के लिए अगर मैं जो एक मैं अपनी सी # कार्यक्रम में उपयोग करना चाहते हैं निर्दिष्ट कर सकते हैं के लिए तैयार हूँ, फिर भी । जब मैं उदाहरण के लिए, System.Tuple प्रकार का उपयोग करने का प्रयास करें, मैं निम्नलिखित सी # संकलक त्रुटि मिलती है:

Error 2 The type 'System.Tuple' exists in both 'c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\Profile\Client\mscorlib.dll' and 'c:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v2.0\FSharp.Core.dll'

इस के चारों ओर जिस तरह से, जाहिरा तौर पर, a switch on the C# compiler command line which aliases the type है:

csc.exe MyType.cs /reference:System.Tuple`2=mscorlib.dll /reference:FSharp.Core.dll

हालांकि, मैं नहीं कर सकता इस पैरामीटर को सी # कंपाइलर को भेजने के लिए विजुअल स्टूडियो प्राप्त करने का एक तरीका खोजें।

किसी के पास इसका समाधान है?

उत्तर

12

आपको एफ # रनटाइम के 4.0 संस्करण को संदर्भित करने की आवश्यकता है। यह संस्करण mscorlib के 4.0 संस्करण के अनुरूप है और इसमें विरोधाभासी प्रकार नहीं हैं। वे इस निर्देशिका

C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v4.0

+0

ध्यान दें कि 4.0 संस्करण 'c: \ Program Files (x86) \ संदर्भ असेंबली \ Microsoft \ FSharp \ 2.0 \ Runtime \ v4.0 \ FSharp.Core.dll' में रहता है। क्या आपने संदर्भ प्राप्त करने के लिए 'एड संदर्भ' का उपयोग किया था? मैं सोच रहा हूं कि आप पहली बार 4.0 प्रोजेक्ट में 2.0 को संदर्भित करते हुए कैसे घायल हो गए थे। – Brian

+0

हाँ, मैंने इसे प्राप्त करने के लिए "संदर्भ जोड़ें" का उपयोग किया ... हालांकि, मेरे पास बेहतर डिजाइन किए गए संदर्भ संदर्भ संवाद के साथ वीएस पावरटूल हैं, इसलिए यह समस्या हो सकती है। – codekaizen

+0

@ ब्रायन, स्क्रैच कि। मैंने इसे ब्राउज़ किया होगा, और यह समझ में नहीं आया कि एफ # वी 2.0 सीएलआरवी 2 को भी लक्षित कर सकता है, और इसलिए विधानसभा के दो अलग-अलग सेट हैं। – codekaizen

3

आप संघर्ष को सुलझाने कर सकते हैं में सी # कोड में C# assembly aliases का उपयोग कर और योग्यता स्रोत विधानसभा स्पष्ट रूप से फिर शुरू होगा: उदाहरण के लिए यदि आप टपल प्रकार दोनों एफ # विधानसभा में और आप पुस्तकालयों में परिभाषित किया गया है।

+0

यह अच्छा है, और मुझे सी # में 'बाहरी उपनाम' के बारे में पता नहीं था, लेकिन यह भी नोट करता है कि "उपनाम को कमांड लाइन पर निर्दिष्ट किया जाना चाहिए", जो कि दृश्य में अस्पष्ट और अव्यवहारिक प्रतीत होता है स्टूडियो। – codekaizen

+1

वीएस इस सुविधा का समर्थन करता है: आप असेंबली संदर्भ – desco

+0

वाह के गुणों में उपनाम निर्दिष्ट कर सकते हैं। ठंडा! उत्कृष्ट टिप के लिए धन्यवाद। +1। – codekaizen

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