使用包而不F#项目结构

问题描述 投票:1回答:2

有没有什么办法,只是在我的系统安装程序包并有任何.fs文件能够引用呢?是否有可能使用F#的软件包不按项目结构?所有FSharp使用我所看到的要么利用的NuGet的(正确大型项目)或引用下载DLL(用于F#.fsx脚本)外部包。

我期待利用编译器和生成的可执行文件。

我的使用情况如下:

我有一个非常简单的命令行脚本,并不能证明其有一堆项目,一揽子贷款和配置文件一个复杂的项目结构。我真正需要的是编译一个FSharp文件并产生.exe

现在,这个脚本需要做一些HTTP请求,检索一个JSON响应,并变换数据 - 我相信FSharp.Data是这个职位的最佳工具,但我一直无法找出它如何与我的问题结合起来。

f# package
2个回答
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 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后,你有你的应用做好准备。


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

© www.soinside.com 2019 - 2024. All rights reserved.