有没有什么办法,只是在我的系统安装程序包并有任何.fs
文件能够引用呢?是否有可能使用F#的软件包不按项目结构?所有FSharp使用我所看到的要么利用的NuGet的(正确大型项目)或引用下载DLL(用于F#.fsx
脚本)外部包。
我期待利用编译器和生成的可执行文件。
我的使用情况如下:
我有一个非常简单的命令行脚本,并不能证明其有一堆项目,一揽子贷款和配置文件一个复杂的项目结构。我真正需要的是编译一个FSharp文件并产生.exe
。
现在,这个脚本需要做一些HTTP请求,检索一个JSON响应,并变换数据 - 我相信FSharp.Data是这个职位的最佳工具,但我一直无法找出它如何与我的问题结合起来。
我不认为这是你所需要的东西,直到该语言的建议是实施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
后,你有你的应用做好准备。
你总是可以直接调用编译器生成可执行文件:
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
文件。