2010-06-23 25 views
8

Bạn có một giải pháp với một dự án C# trong đó. SomeComp.Framework là tên. Bạn thêm dự án F # vào giải pháp. Bạn tham khảo dự án SomeComp.Framework trong dự án F #. Bạn chèn một tập tin kịch bản - test.fsx vào dự án F #. Cách chính xác để tham khảo C# lắp ráp trong tập tin kịch bản là gì?F #/C# - fsx Tập tin kịch bản và tham khảo dự án

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

Có cách nào để thực hiện việc này mà không cần mã hóa đường dẫn không? Tệp .fsx có nhận bất kỳ cài đặt/thuộc tính nào từ bên trong dự án F # không?

Trả lời

15

Không, nó không nhận được bất kỳ cài đặt nào từ dự án, bạn phải mã hóa đường dẫn. (Đây là một kịch bản chúng tôi sẽ xem xét cải thiện cho một bản phát hành trong tương lai.) Hãy cẩn thận về đường dẫn 'Debug' so với 'Release'.

EDIT

Ok, wow, tôi đã tìm ra một cái gì đó hữu ích:

#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" 

Execute mà như hai đoạn, mọi thứ đầu tiên nhưng dòng cuối cùng, và cuối cùng là dòng cuối cùng. Về cơ bản nó thay đổi cài đặt FSI của bạn bên trong VS và đặt lại phiên, vì vậy sau đó bạn chỉ có thể #r "MyLibrary.dll" mà không có đường dẫn.

Nó là một hack khổng lồ, nhưng có vẻ như một số người có thể thấy nó hữu ích, vì vậy tôi đang chia sẻ nó.

+0

Tập lệnh có thể nhận nơi nó đang chạy không? điều đó cũng sẽ tốt đẹp. – BuddyJoe

+1

Lưu ý rằng methof này có thể khiến bạn gặp rắc rối nếu có nhiều hơn một trường hợp VS đang chạy trên hệ thống của bạn. –

+0

rất hay. cảm ơn. upvotes – BuddyJoe

Các vấn đề liên quan