标签: f#-scripting

脚本的F#:脚本文件的位置

在F#脚本文件(.fsx)中,如何确定当前正在执行的.fsx文件的位置?我想解决相对于它的路径.

我试过,Assembly.GetExecutingAssembly().CodeBase但显然不适用于"动态组装".

scripting f# f#-scripting

29
推荐指数
1
解决办法
3381
查看次数

在FSX文件中包含文件?

我使用F#作为FSI的脚本语言.有没有办法在我的脚本中包含另一个fsx文件?我希望能够将我的脚本分成多个文件以执行更大的任务.

谢谢.

f# f#-interactive f#-scripting

10
推荐指数
1
解决办法
4408
查看次数

合并两个列表

我希望以纯粹的功能方式合并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)

recursion f# list f#-scripting

10
推荐指数
2
解决办法
2908
查看次数

在自托管的F#脚本中设置ExitCode

我在我的构建工具(" FAKE - F#Make ")中托管FSI.exe,我需要从我的fsx脚本中设置FSI.exe的ExitCode.这可能吗?

目前我在F#构建脚本中引发错误,这会设置退出代码,但它也会在构建日志中显示讨厌的异常和stackstraces.

谢谢,提前和最诚挚的问候,Steffen

f# f#-interactive f#-scripting

9
推荐指数
1
解决办法
611
查看次数

如何在C#Application的上下文中运行F#脚本

是否可以从C#应用程序(主机)的内部(以及上下文)中运行F#脚本.

在"在上下文中"我的意思是以下应该是真的:

  • 没有单独的执行脚本的过程
  • 从F#脚本访问主机应用程序的静态内容(类,属性,方法)

基本上我正在寻找类似于这个假设的API调用的API

FSharpScriptRunner.RunInContext(string script);
Run Code Online (Sandbox Code Playgroud)

请帮忙.

-Matthias

c# f# f#-scripting

7
推荐指数
1
解决办法
1583
查看次数

.fsx中的IntelliSense和动态加载的程序集

使用#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并说"命名空间或模块'假'未定义",它也突出显示TargetRun.我在VS 2010 SP1和VS 11 CTP中遇到此问题.这个问题使得编写F#脚本的任务比它更难.

顺便说一句,IntelliSence对于"常见"类型很有效.FakeLib.dllFakeLib.xml存在于.\Tools\FAKE目录中.代码运行良好.

更新1 这是情况的屏幕截图.您可以看到VS FakeLib正确地解析了程序集(在工具提示中),同时Intellisense"看到"标准类型(tooltip over Console)类.

在此输入图像描述

更新2 我认为我的工作站上的IntelliSense出现了问题,因为它(IntelliSense)本身就很奇怪.当我启动VS并打开.fsx文件时,IntelliSense甚至拒绝解析标准类型/类,并且它不会强调FAKE类,它什么都不做.但经过一段时间后,对代码进行了一些操作,IntelliSense开始为标准类型和下划线FAKE类型工作.

此外,当我在家庭工作站上创建类似代码时,没有任何问题,IntelliSense可以正常工作.

intellisense f# visual-studio f#-scripting

6
推荐指数
1
解决办法
938
查看次数

F#:将一系列序列展平为单个Seq

我正在尝试构建一个包含多个文件内容的单个序列,以便对其进行排序然后传递给图形组件.但是我一直试图将每个文件的内容折叠在一起.下面的伪代码不会编译,但希望将显示我想要实现的目的.

任何帮助,非常感谢.

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# f#-scripting

6
推荐指数
1
解决办法
4332
查看次数

使用fsx文件中的app.config

是否可以使用F#脚本(fsx)文件中的app.config文件?如果是这样,怎么样?我在哪里放置文件以及它将被称为什么?

configuration-files f#-scripting

6
推荐指数
1
解决办法
1052
查看次数

如何在运行后保持fsi.exe打开

我有一堆F#脚本(fsx),我用它来满足我的基本部署需求.我只是右键单击它们并说"运行F#interactive"

但是,有时脚本失败,我想保持交互式控制台运行.到目前为止,我还没有找到一个很好的方法来实现这一目标.

我尝试手动启动fsi.exe但是如何从那里启动我的脚本?

f# f#-interactive f#-scripting

5
推荐指数
1
解决办法
897
查看次数

我可以在fsx文件中安装/引用包吗?

我试图找到一个简单的解决方案,而不是手动工作来引用包.在.fsx文件中.

  • LinqPad 4 让我简单地添加nuget包
    • 没有智能感知或自动完成
    • 下载后删除某些类型的软件包(例如templatus)
  • LinqPad 5 beta 让我添加nuget包
    • 下载后删除某些类型的软件包(例如templatus)
    • 频繁失败(智能感知和编译)
  • 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)
  • 与VSCode中intellisense/autocompletion引擎的相对路径不匹配,因此我无法从等式中删除VS.
  • 在该位置已有该软件包的计算机之外不起作用
  • 最终做了一堆不能跨越.fsx文件的代码,并且必须根据包引用进行处理

我不想创建一个项目.我有大量单独的脚本,可以由其他人按需单独维护和使用.

是否有一个IDE(或其中一个的修复/扩展)可以为F#.fsx文件提供智能感知,自动完成和包管理,这些文件可以轻松地从用户到用户,从机器到机器工作?

f# f#-scripting

5
推荐指数
2
解决办法
1348
查看次数