使用不带F#项目结构的软件包

时间:2019-02-07 13:34:01

标签: f# package

有什么方法可以只在我的系统中安装一个软件包,并使任何.fs文件能够引用它? 是否可以在不遵循项目结构的情况下使用F#软件包? 我见过的所有对FSharp外部软件包的使用,要么利用NuGet(用于适当的 big 项目),要么引用下载的dll(用于F#.fsx脚本)。

我希望利用编译器并生成可执行文件。

我的用例如下:

我有一个非常简单的命令行脚本,它不能证明拥有包含一堆项目,paket和配置文件的复杂项目结构。我真正需要的只是编译一个FSharp文件并生成一个.exe

现在,此脚本需要执行一些HTTP请求,检索JSON响应并转换该数据-我相信FSharp.Data是完成这项工作的理想工具,但我一直无法找出如何将其与问题集成在一起。

2 个答案:

答案 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文件。