F#/C#-fsx脚本文件和项目引用
您有一个包含一个C#项目的解决方案。SomeComp.Framework就是这个名字。 在解决方案中添加一个F#项目。您可以在F#项目中引用SomeComp.Framework项目。将脚本文件-test.fsx插入到F#项目中。在脚本文件中引用C#程序集的正确方法是什么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#项目内的位置获取任何设置/属性?否,它没有从项目获取任何设置,您必须硬
#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实例,这种方法可能会给您带来麻烦。这是一个巨大的黑客攻击。但是有时候很高兴能进入内部工作。嗨,布莱恩,我希望你看到这是一个反复出现的问题()我认为解决这个问题是有意义的我也有一个简单的方法: