2017-07-12 7 views
5

मैं वर्तमान में विकसित कर रहा हूँ एफ # Azure कार्य करता है और मैं इस तरह के रूप में मेरी परियोजना से बाहर रखा गया है:शेयर कोड परियोजना वी.एस. कोड uinsg

ProjectFolder 
    -> Function1 
     -> function.json 
     -> run.fsx 
    -> Function2 
     -> function.json 
     -> run.fsx 

यह देखते हुए कि एफ # फ़ोल्डर का समर्थन नहीं करता क्या सबसे अच्छा है दो कार्यों के बीच कोड (विशेष रूप से प्रकार) साझा करने का तरीका?

+3

मैं स्क्रिप्ट के बजाय एज़ूर फ़ंक्शंस के लिए एक fsproj (प्री-संकलित) का उपयोग करने की अनुशंसा करता हूं। विशेष रूप से यदि आप कार्यों के बीच कोड साझा करना चाहते हैं। पूर्व संकलित करने के लिए केवल फायदे हैं। आप वीएस एज़ूर फ़ंक्शंस प्रोजेक्ट का उपयोग करने में सक्षम नहीं होंगे लेकिन आपको इसकी आवश्यकता नहीं है। – TheQuickBrownFox

उत्तर

5

एफ # कंपाइलर फ़ोल्डर का समर्थन करता है ठीक है। आप इस तथ्य का जिक्र कर रहे हैं कि विजुअल स्टूडियो, डिफ़ॉल्ट कॉन्फ़िगरेशन में, किसी को F # प्रोजेक्ट में फ़ोल्डर जोड़ने की अनुमति नहीं देता है - यह एक वास्तविक तथ्य है। लेकिन अगर आप किसी भी तरह से अपनी प्रोजेक्ट फ़ाइल में फ़ोल्डर जोड़ने के लिए प्रबंधन करते हैं (या तो फ़ाइल को मैन्युअल रूप से संपादित करके, या F# Power Tools के साथ), तो F # कंपाइलर को उनके साथ कोई समस्या नहीं होगी।

लेकिन यह आपके मामले के लिए सभी अप्रासंगिक है, क्योंकि स्क्रिप्ट्स (fsx) संकलित मॉड्यूल (fs) जैसी ही नहीं हैं। स्क्रिप्ट्स में एक साथ बाध्य करने के लिए कोई प्रोजेक्ट नहीं है, और इसके बजाय एक दूसरे के कोड का उपयोग करने के लिए #load एक दूसरे को अवश्य होना चाहिए। और #load किसी भी पथ से किया जा सकता है। Function1/run.fsx भीतर

ProjectFolder 
    -> Common 
     -> Helpers.fsx 
    -> Function1 
     -> function.json 
     -> run.fsx 
    -> Function2 
     -> function.json 
     -> run.fsx 

और फिर,, रिश्तेदार पथ का उपयोग कर फ़ाइल Helpers.fsx लोड:

उदाहरण के लिए, अगर आप इस तरह अपने कोड बाहर रखना चाहते हो सकता है

// Function1/run.fsx 
#load "../Common/Helpers.fsx" 

let x = Helpers.someFunction() 

रूप से स्पष्ट है ऊपर दिया गया उदाहरण, स्क्रिप्ट फ़ाइल के नाम पर एक मॉड्यूल के रूप में होस्ट स्क्रिप्ट के भीतर इस तरह से लोड की गई एक स्क्रिप्ट दिखाई देगी।

यह काम करता है, लेकिन समय के साथ यह बहुत गन्दा हो जाएगा। मैं अत्यधिक इसके बजाय precompiled कोड के साथ जाने की सलाह देते हैं। इस तरह, आप एक साझा पुस्तकालय में सामान्य कोड डाल सकते हैं और इसे दोनों कार्यों से संदर्भित कर सकते हैं।

मैं बहुत अधिक this recent video from NDC Oslo की अनुशंसा करता हूं। यह इन चीजों और अधिक के बारे में बहुत अच्छी बात करता है।

+0

क्या मुझे नामस्थान/मॉड्यूल इत्यादि के साथ गैर स्क्रिप्ट फ़ाइलों को भी परेशान करना चाहिए ..? – Slugart

+1

हां, आप गैर-स्क्रिप्ट फ़ाइलों को भी शामिल कर सकते हैं। वे उपयोग करने के लिए थोड़ा अजीब होंगे, लेकिन वे काम करेंगे। लेकिन मैं इसकी सिफारिश नहीं करता हूं। जैसे मैंने कहा, मैं precompiling की सलाह देते हैं। –

+0

मेरे पास उस इंस्टैपर कतार में वह वीडियो था :) – Slugart