2010-06-23 12 views
8

आपके पास एक सी # परियोजना के साथ समाधान है। कुछ कॉम्प। फ्रेमवर्क नाम है। आप समाधान के लिए एक एफ # परियोजना जोड़ें। आप F # प्रोजेक्ट में SomeComp.Framework प्रोजेक्ट का संदर्भ देते हैं। आप एक स्क्रिप्ट फ़ाइल - test.fsx को F # प्रोजेक्ट में डालते हैं। स्क्रिप्ट फ़ाइल में सी # असेंबली का संदर्भ देने का सही तरीका क्या है?एफ #/सी # - एफएसएक्स स्क्रिप्ट फ़ाइलें और परियोजना संदर्भ

#r "SomeComp.Framework.dll" // doesn't work 

वहाँ किसी तरह एक पथ हार्डकोड बिना यह करने के लिए है? क्या .fsx फ़ाइल किसी F # प्रोजेक्ट के अंदर स्थित होने से कोई सेटिंग/गुण प्राप्त करती है?

उत्तर

15

नहीं, यह परियोजना से किसी भी सेटिंग को नहीं मिलता है, तो आप पथ हार्डकोड करने की है। (यह एक परिदृश्य है जिसे हम भावी रिलीज के लिए सुधारने पर विचार करेंगे।) 'डीबग' बनाम 'रिलीज' पथों के बारे में भी सावधान रहें।

#r "EnvDTE" 
#r "EnvDTE80" 
#r "VSLangProj" 

let appObj = System.Runtime.InteropServices.Marshal. 
       GetActiveObject("VisualStudio.DTE") :?> EnvDTE80.DTE2 
let solnDir = System.IO.Path.GetDirectoryName(appObj.Solution.FileName) 
let cfg = appObj.Solution.SolutionBuild.ActiveConfiguration.Name 
let libraryDLLPath = System.IO.Path.Combine 
         [| solnDir; "Library1"; "bin"; cfg |] 

//#r libraryDLL // illegal, since #r takes a string literal, but... 

let props = appObj.Properties("F# Tools", "F# Interactive") 
let cla = props.Item("FsiCommandLineArgs") 
cla.Value <- sprintf "--optimize -I:\"%s\"" libraryDLLPath 

appObj.ExecuteCommand("View.F#Interactive", "") 
appObj.ExecuteCommand("OtherContextMenus.FSIConsoleContext.ResetSession", "") 

#r "Library1.dll" 

निष्पादित कि दो टुकड़े, पहले सब कुछ है, लेकिन अंतिम पंक्ति, और अंत में अंतिम पंक्ति के रूप:

संपादित

ठीक है, वाह, मैं बाहर कुछ उपयोगी लगा। यह मूल रूप से वीएस के अंदर आपकी एफएसआई सेटिंग्स को बदलता है और सत्र को रीसेट करता है, इसलिए बाद में आप बिना पथ के #r "MyLibrary.dll" कर सकते हैं।

यह एक विशाल हैक है, लेकिन कुछ लोगों को यह उपयोगी मिल सकता है जैसे कि यह लगता है, इसलिए मैं इसे साझा कर रहा हूँ।

+0

क्या कोई स्क्रिप्ट उस स्थान से उठा सकती है जहां से यह चल रहा है? वह भी अच्छा होगा। – BuddyJoe

+1

ध्यान दें कि यदि आपके सिस्टम पर चल रहे वीएस के एक से अधिक उदाहरण हैं तो यह मेथॉफ़ आपको परेशानी में डाल सकता है। –

+0

बहुत अच्छा। धन्यवाद। अपवॉट – BuddyJoe

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