Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#/C#-fsx脚本文件和项目引用_F#_F# Interactive - Fatal编程技术网

F#/C#-fsx脚本文件和项目引用

F#/C#-fsx脚本文件和项目引用,f#,f#-interactive,F#,F# Interactive,您有一个包含一个C#项目的解决方案。SomeComp.Framework就是这个名字。 在解决方案中添加一个F#项目。您可以在F#项目中引用SomeComp.Framework项目。将脚本文件-test.fsx插入到F#项目中。在脚本文件中引用C#程序集的正确方法是什么 #r "SomeComp.Framework.dll" // doesn't work 有没有办法不用硬编码路径就能做到这一点? .fsx文件是否从位于F#项目内的位置获取任何设置/属性?否,它没有从项目获取任何设置,您必须硬

您有一个包含一个C#项目的解决方案。SomeComp.Framework就是这个名字。 在解决方案中添加一个F#项目。您可以在F#项目中引用SomeComp.Framework项目。将脚本文件-test.fsx插入到F#项目中。在脚本文件中引用C#程序集的正确方法是什么

#r "SomeComp.Framework.dll" // doesn't work
有没有办法不用硬编码路径就能做到这一点?
.fsx文件是否从位于F#项目内的位置获取任何设置/属性?

否,它没有从项目获取任何设置,您必须硬编码路径。(这是一个我们将在未来版本中改进的场景。)也要注意“调试”和“发布”路径

编辑

好吧,哇,我想出了一些有用的办法:

#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“EnvDTE”
#r“EnvDTE80”
#r“VSLangProj”
让appObj=System.Runtime.InteropServices.Marshal。
GetActiveObject(“VisualStudio.DTE”):?>EnvDTE80.DTE2
让solnDir=System.IO.Path.GetDirectoryName(appObj.Solution.FileName)
让cfg=appObj.Solution.SolutionBuild.ActiveConfiguration.Name
让libraryDLLPath=System.IO.Path.Combine
[| solnDir;“Library1”、“bin”cfg |]
//#r libraryDLL//非法,因为#r接受字符串文字,但是。。。
让props=appObj.Properties(“F#Tools”、“F#Interactive”)
设cla=props.Item(“FsiCommandLineArgs”)

cla.Value否,它不会从项目中获取任何设置,您必须硬编码路径。(这是一个我们将在未来版本中改进的场景。)也要注意“调试”和“发布”路径

编辑

好吧,哇,我想出了一些有用的办法:

#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“EnvDTE”
#r“EnvDTE80”
#r“VSLangProj”
让appObj=System.Runtime.InteropServices.Marshal。
GetActiveObject(“VisualStudio.DTE”):?>EnvDTE80.DTE2
让solnDir=System.IO.Path.GetDirectoryName(appObj.Solution.FileName)
让cfg=appObj.Solution.SolutionBuild.ActiveConfiguration.Name
让libraryDLLPath=System.IO.Path.Combine
[| solnDir;“Library1”、“bin”cfg |]
//#r libraryDLL//非法,因为#r接受字符串文字,但是。。。
让props=appObj.Properties(“F#Tools”、“F#Interactive”)
设cla=props.Item(“FsiCommandLineArgs”)

cla.Value脚本可以从何处获取它的运行信息?这也很好。请注意,如果您的系统上运行多个VS实例,这种方法可能会给您带来麻烦。这是一个巨大的黑客攻击。但是有时候很高兴能进入内部工作。嗨,布莱恩,我希望你看到这是一个反复出现的问题()我认为解决这个问题是有意义的我还有一个简单的方法:脚本能从哪里开始运行?这也很好。请注意,如果您的系统上运行多个VS实例,这种方法可能会给您带来麻烦。这是一个巨大的黑客攻击。但是有时候很高兴能进入内部工作。嗨,布莱恩,我希望你看到这是一个反复出现的问题()我认为解决这个问题是有意义的我也有一个简单的方法: