macos - 如何生成 F# 签名文件(没有 Visual Studio)
问题描述
我在 MacOS 上使用 JetBrains Rider 并尝试使用 Scott Wlaschin 的代码域建模功能化
这是我的模块定义及其依赖项:
module internal DomainModeling.Domain.PlaceOrderWorkflow.Internal
open DomainModeling.Domain.Api
open DomainModeling.Domain.Primitives
open DomainModeling.Domain.Utils
我想从此模块生成签名文件。但我对使用 dotnet builder 或 fsharp 编译器感到困惑。如果我使用 dotnet 命令,我无法传递标志--sig 但是如果我使用 fsharp 编译器这样
fsharpc src/PlaceOrderWorkflow.fs --sig:PlaceOrderWorkflow.fsi
我得到编译器错误。我想是因为它不知道我的依赖关系。像这样的错误
error FS0039: The namespace or module 'DomainModeling' is not defined.
那么,请告诉我在这种情况下如何生成 *.fsi ?
解决方案
您很可能会收到此错误,因为您没有将所有源文件传递给 F# 编译器,而只传递了一个文件。要生成 F# 接口文件,编译器需要处理整个项目,因此您需要调用fsharpc
所有源文件,还需要引用您所依赖的所有库。如果您的项目不重要,这可能会非常困难。
但是,您可以--sig
在普通fsproj
项目文件中指定参数。我刚刚对此进行了测试,它似乎也可以与 .NET Core 一起使用。您可以通过添加OtherFlags
参数来做到这一点:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DefineConstants>TRACE</DefineConstants>
<PlatformTarget>AnyCPU</PlatformTarget>
<OtherFlags>--sig:test.fsi</OtherFlags>
</PropertyGroup>
<ItemGroup>
<Compile Include="Program.fs" />
</ItemGroup>
</Project>
当我指定它并使用运行我的项目dotnet run
或使用构建它时dotnet build
,它会生成test.fsi
包含所有接口的文件。(这是针对整个项目的,但我认为没有办法将其限制为单个文件的接口。)
推荐阅读
- javascript - 使用新状态数据刷新 Material-UI DataGrid 组件
- mpi - MPI 使用 MPI_Type_create_subarray 读取文件
- python - 下载excel文件时Django奇怪的符号(页面也使用ajax)
- android - 如何更改 Android Studio 选项卡文本颜色?
- java - 如何解决 readline() 的“线程“主”java.io.IOException:流已关闭”的问题?
- reactjs - 有很多链接来管理文本响应的更好方法是什么
- c++ - C++ 在这种情况下,朋友是个好主意吗?
- c# - 在 Unity 中将纹理映射到点云
- php - 为什么这会产生零误差除法?
- javascript - 显示最后一个空对象的添加新按钮