.net F#自动编译顺序

sczxawaw  于 2023-02-06  发布在  .NET
关注(0)|答案(1)|浏览(148)

有没有什么方法可以自动将所有F#文件包含在一个目录或子目录中进行编译?理想情况下,我不希望每次创建新文件时都必须更改.fsproj文件。
我原以为向.fsproj文件中添加以下内容可能会起作用,但不幸的是,文件的指定顺序很重要。

<ItemGroup>
    <Compile Include="**\*.fs" />
</ItemGroup>

<ItemGroup>
    <Compile Remove="obj\**" />
    <EmbeddedResource Remove="obj\**" />
    <Compile Remove="bin\**" />
    <EmbeddedResource Remove="bin\**" />
</ItemGroup>

我能想到的不想更改.fsproj文件的最佳理由是:

  • 纯粹懒惰
  • 在git中处理多个分支时减少合并冲突

还有一个小问题,有人能解释一下为什么F# MSBuild的行为是必须以正确的顺序指定每个文件吗?我认为这与防止代码库中的循环依赖有关,但我不明白为什么编译器不能在编译时收集所有文件,如果它检测到任何循环依赖,则引发编译错误。
编辑:我应该提到我使用的是.NET7.0

czq61nw1

czq61nw11#

指定文件的顺序是F#语言本身的一个特性,而不是任何工具的特性。你可以想象编译器将按照项目文件中列出的从上到下、每行和每个文件的顺序进行编译。在这样做的同时,它只会向后查找引用的元素。这避免了循环依赖,这只是提到的优点之一。
所以不,你不能避免列出顺序,你还必须解决由此产生的合并冲突,因为如果你有不同的顺序,这实际上是程序中的逻辑冲突。
您可以在Scott Wlaschin关于这个主题的优秀文章中阅读更多关于组织F#源代码的内容:Organizing modules in a project。事实上,如果您还没有浏览整个站点,您应该浏览一遍。
PS:不要不加批判地添加标签。除非你有具体的问题,否则不应该使用一个以上的标签,而这不是。

相关问题