在F#脚本文件(.fsx)中,如何确定当前正在执行的.fsx文件的位置?我想解决相对于它的路径.
我试过,Assembly.GetExecutingAssembly().CodeBase但显然不适用于"动态组装".
我使用F#作为FSI的脚本语言.有没有办法在我的脚本中包含另一个fsx文件?我希望能够将我的脚本分成多个文件以执行更大的任务.
谢谢.
我希望以纯粹的功能方式合并F#中的2个列表.我很难理解语法.
假设我有一个元组 ([5;3;8],[2;9;4])
当我调用该函数时,它应该返回 [5;2;3;9;8;4]
这就是我到目前为止的原因,我确信这是错误的.如果有人能以简单的方式解释,我将不胜感激.
let rec interleave (xs,ys) = function
|([], ys) -> ys
|(x::xs, y::ys) -> x :: y:: interleave (xs,ys)
Run Code Online (Sandbox Code Playgroud) 我在我的构建工具(" FAKE - F#Make ")中托管FSI.exe,我需要从我的fsx脚本中设置FSI.exe的ExitCode.这可能吗?
目前我在F#构建脚本中引发错误,这会设置退出代码,但它也会在构建日志中显示讨厌的异常和stackstraces.
谢谢,提前和最诚挚的问候,Steffen
是否可以从C#应用程序(主机)的内部(以及上下文)中运行F#脚本.
在"在上下文中"我的意思是以下应该是真的:
基本上我正在寻找类似于这个假设的API调用的API
FSharpScriptRunner.RunInContext(string script);
Run Code Online (Sandbox Code Playgroud)
请帮忙.
-Matthias
使用#I和动态引用.fsx中的程序集时#r,VS会突出显示导入类型的以下用法并写入"未定义名称空间或模块'XXX'".好吗?
例如,在以下代码中
#I @".\Tools\FAKE"
#r "FakeLib.dll"
open Fake
Target "Hello" (fun _ -> trace "hello!")
Run "Hello"
Run Code Online (Sandbox Code Playgroud)
VS亮点Fake并说"命名空间或模块'假'未定义",它也突出显示Target和Run.我在VS 2010 SP1和VS 11 CTP中遇到此问题.这个问题使得编写F#脚本的任务比它更难.
顺便说一句,IntelliSence对于"常见"类型很有效.FakeLib.dll和FakeLib.xml存在于.\Tools\FAKE目录中.代码运行良好.
更新1
这是情况的屏幕截图.您可以看到VS FakeLib正确地解析了程序集(在工具提示中),同时Intellisense"看到"标准类型(tooltip over Console)类.

更新2
我认为我的工作站上的IntelliSense出现了问题,因为它(IntelliSense)本身就很奇怪.当我启动VS并打开.fsx文件时,IntelliSense甚至拒绝解析标准类型/类,并且它不会强调FAKE类,它什么都不做.但经过一段时间后,对代码进行了一些操作,IntelliSense开始为标准类型和下划线FAKE类型工作.
此外,当我在家庭工作站上创建类似代码时,没有任何问题,IntelliSense可以正常工作.
我正在尝试构建一个包含多个文件内容的单个序列,以便对其进行排序然后传递给图形组件.但是我一直试图将每个文件的内容折叠在一起.下面的伪代码不会编译,但希望将显示我想要实现的目的.
任何帮助,非常感谢.
open System.IO
let FileEnumerator filename = seq {
use sr = System.IO.File.OpenText(filename)
while not sr.EndOfStream do
let line = sr.ReadLine()
yield line
}
let files = Directory.EnumerateFiles(@"D:\test_Data\","*.csv",SearchOption.AllDirectories)
let res =
files
|> Seq.fold(fun x item ->
let lines = FileEnumerator(item)
let sq = Seq.concat x ; lines
sq
) seq<string>
printfn "%A" res
Run Code Online (Sandbox Code Playgroud) 是否可以使用F#脚本(fsx)文件中的app.config文件?如果是这样,怎么样?我在哪里放置文件以及它将被称为什么?
我有一堆F#脚本(fsx),我用它来满足我的基本部署需求.我只是右键单击它们并说"运行F#interactive"
但是,有时脚本失败,我想保持交互式控制台运行.到目前为止,我还没有找到一个很好的方法来实现这一目标.
我尝试手动启动fsi.exe但是如何从那里启动我的脚本?
我试图找到一个简单的解决方案,而不是手动工作来引用包.在.fsx文件中.
LinqPad 4 让我简单地添加nuget包
LinqPad 5 beta 让我添加nuget包
VS2015 不允许您下载/安装fsx文件的包(仅限于项目)VSCode 不允许您下载/安装fsx文件的nuget或paket包.所以我最终不得不在VS2015中使用.fsx,同时使用linqpad来获取下载的软件包(对于像templatus这样下载exe而不是dll的软件包仍然会失败).然后我可以将它们作为参考
#I @"..\LINQPad\NuGet.FW46\FParsec\FParsec.1.0.2\lib\net40-client\" // references AppData\local\ ... since . is %localappdata%\TEMP
Run Code Online (Sandbox Code Playgroud)
我不想创建一个项目.我有大量单独的脚本,可以由其他人按需单独维护和使用.
是否有一个IDE(或其中一个的修复/扩展)可以为F#.fsx文件提供智能感知,自动完成和包管理,这些文件可以轻松地从用户到用户,从机器到机器工作?