有什么方法可以只在我的系统中安装一个软件包,并使任何.fs
文件能够引用它?
是否可以在不遵循项目结构的情况下使用F#软件包?
我见过的所有对FSharp外部软件包的使用,要么利用NuGet(用于适当的 big 项目),要么引用下载的dll(用于F#.fsx
脚本)。
我希望利用编译器并生成可执行文件。
我的用例如下:
我有一个非常简单的命令行脚本,它不能证明拥有包含一堆项目,paket和配置文件的复杂项目结构。我真正需要的只是编译一个FSharp文件并生成一个.exe
。
现在,此脚本需要执行一些HTTP请求,检索JSON响应并转换该数据-我相信FSharp.Data是完成这项工作的理想工具,但我一直无法找出如何将其与问题集成在一起。
答案 0 :(得分:2)
在实施此语言建议之前,我不认为有一种支持方法可以准确满足您的需求https://github.com/fsharp/fslang-design/blob/master/tooling/FST-1027-fsi-references.md
如果只需要FSharp.Data,而又不太在乎编辑器工具和lib版本控制,则可以手动下载.dll,从文件中使用(将其命名为app.fs
),然后使用F#工具安装后,您可以使用fsc.exe -r:<path-to-FSharp.Data.dll> -o app.exe --standalone --target:exe app.fs
之类的语言对其进行编译(我没有尝试过这套特殊的选项,但是您可以选中fsc docs)
项目系统并不是那么复杂和重量级,特别是如果您可以通过其命令行界面使用.NET Core SDK。
如果您运行dotnet new console -lang=F#
,则整个项目文件如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Compile Include="Program.fs" />
</ItemGroup>
</Project>
,根据您的工具,您可以将<PackageReference Include="FSharp.Data" Version="3.0.0" />
添加到<ItemGroup>
,然后在dotnet publish
之后,就可以准备好应用了。
答案 1 :(得分:2)
您始终可以直接调用编译器以生成可执行文件:
Fsc.exe
"..\projects\modules\src\Calculate primes.fs"
-o:"..\projects\modules\bin\Calculate primes.exe"
--debug:full
--define:DEBUG
--define:TRACE
--target:winexe
-g
--warn:3
--warnaserror:76
--vserrors
--utf8output
--fullpaths
--flaterrors
--subsystemversion:6.00
--highentropyva+
--optimize-
--tailcalls-
-I:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1"
-I:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades"
创建一个批处理文件并将其全部放在一行中。 像这样添加所需的库:
-r:"..\packages\FSharp.Data\lib\net45\FSharp.Data.dll"
编译后,您可能需要复制与可执行文件在同一目录中使用的所有dll,这有助于拥有一个<program>.exe.config
文件。