在我的项目中,我打开一个文件,其中包含一些可执行文件的相对路径.我试图在F#Interractive窗口中测试我的代码,但它似乎是从一个完全不同的路径运行.如何更改路径/使其从与项目相同的路径运行?
在Windows 7上测试F#3.1
fsi.PrintLength < - 5000 ;;
[1..5000] ;;
由于StackOverflowException,进程终止.检测到会话终止.按Enter重新启动.
在Mono(F#4.0)上,似乎没有这样的限制.
我是F#的新手,我正在试图弄清楚如何从列表/字符串数组中返回一个随机字符串值.
我有一个这样的列表:
["win8FF40", "win10Chrome45", "win7IE11"]
Run Code Online (Sandbox Code Playgroud)
如何从上面的列表中随机选择并返回一个项目?
这是我的第一次尝试:
let combos = ["win8FF40";"win10Chrome45";"win7IE11"]
let getrandomitem () =
let rnd = System.Random()
fun (combos : string[]) -> combos.[rnd.Next(combos.Length)]
Run Code Online (Sandbox Code Playgroud) 我正在开发一个asp.net Web应用程序,使用户能够提交F#代码,这些代码应该在服务器上动态编译和执行.我正在考虑使用此处显示的方法在Web应用程序中托管F#编译器: https ://fsharp.github.io/FSharp.Compiler.Service/compiler.html 或使用F#interactive:http://fsharp.github .IO/FSharp.Compiler.Service/interactive.html
我们的想法是动态编译F#代码,然后将其作为c#中的程序集加载,或让F#交互式解释代码.但是,我主要担心的是安全性以及如何阻止最终用户执行任意代码.是否有一种简单的方法来限制它?谢谢!
通常对于非脚本化的C#/ F#项目,可以InternalsVisibleTo在依赖性程序集中指定一个属性,并且能够在IDE中获取其内部类型的智能感知.但是在F#脚本中,我如何针对我正在使用的IDE配置依赖性程序集以获取内部类型的智能感知?当然为了让脚本运行fsi我假设我需要类似的东西
[assembly:InternalsVisibleTo("fsi")]
Run Code Online (Sandbox Code Playgroud)
但是为了获得IDE支持,我还应该指定依赖性程序集中的每个已知IDE吗?这似乎没有很好的扩展.
我做了一个代码搜索,发现这个地方fsc,fsi,编译器服务组件和它们的强名称版本等都是指定的,看似适应的IDE.这正是我关心的问题,我不想把这些装置丢弃.有没有更好的办法?
我需要能够在F#interactive中创建一个新的AppDomain,以便托管多个WPF应用程序.我在编译的F#应用程序中获得必要的功能没有任何问题,但由于某种原因使其在F#interactive中工作似乎不可能.
这是最简单的案例: -
#r "PresentationCore.dll"
#r "PresentationFramework.dll"
#r "System.Xaml.dll"
#r "WindowsBase.dll"
open System
open System.Threading
open System.Windows
type myClass() =
let domain = AppDomain.CreateDomain("another domain")
//this function starts a WPF app
let funct() =
let WPFStart() =
let app = Application()
let win = Window()
app.Run(win) |> ignore
let thread = Thread WPFStart
thread.IsBackground <- true
thread.SetApartmentState ApartmentState.STA
thread.Start()
do CrossAppDomainDelegate(funct) |> domain.DoCallBack
myClass();;
Run Code Online (Sandbox Code Playgroud)
我总是回过头来做些什么
System.Runtime.Serialization.SerializationException: Type is not resolved
for member 'FSI_0002+-ctor@24,FSI-ASSEMBLY, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null'.
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at …Run Code Online (Sandbox Code Playgroud) Visual Studio代码中的F#interactive(带有Ionide)在Windows 10上默认具有语法高亮.我刚刚安装了一个Linux发行版,而VSCode + Ionide在交互式终端中没有显示语法高亮.
知道如何配置吗?这就是它现在的样子:
f# syntax-highlighting f#-interactive visual-studio-code ionide
我确信这一定非常简单,但我似乎无法使其发挥作用.假设我有一个.fsx脚本文件,并希望以编程方式执行它.我猜想有人必须在某个时候写过关于此的博客,但我似乎无法找到一个执行我简单场景的例子.基本上,我想以编程方式复制右键单击.fsx文件并选择"使用F#Interactive运行..."时发生的情况.
你如何解决看起来像这样的错误消息?
`Binding session to 'C:\Program Files (x86)\NLog\.NET Framework 4.0\NLog.dll'...
error FS0193: API restriction: The assembly
'file:///C:\Program Files (x86)\NLog\.NET Framework 4.0\NLog.dll' has
already loaded from a different location. It cannot be loaded from a
new location within the same appdomain.
Run Code Online (Sandbox Code Playgroud)
触发它的代码可能如下所示:
#r @"..\packages\NLog.2.0.0.2000\lib\net20\NLog.dll"
NLog.Config.SimpleConfigurator.ConfigureForConsoleLogging()
Run Code Online (Sandbox Code Playgroud)