我的大部分开发都是在 Java 中进行的,我习惯于在 Java 中使用运行时、编译器和构建工具。所以现在我正在尝试进入 .NET 世界,特别是使用 VSCode、Ionide 插件和 F# 来构建 F# 程序。我很难理解与 Java 构建过程的直接比较。到目前为止,这是我的粗略理解:
<build>
部分? <dependencies>
部分? 我真的对 *proj 文件感到困惑。我认为这与 MSBuild 有关。但是我很困惑,因为我认为 FAKE 是 MSBuild 的替代品,但是我看到的一些 FAKE 示例引用了此文件并将其传递给 MSBuildRelease 任务。
另外,为什么 paket 需要依赖项和引用文件?
我希望有人能够确认、澄清、添加或以上任何内容,以达到我目前的理解水平。非常感激!
编辑:
我知道这个问题很复杂而且不是很具体。感谢大家花时间仔细阅读并回答你能回答的问题。我很感激。
最佳答案
由于还没有人回答您问题的 Paket 部分,我将解决该问题。
在一个 Git 存储库中,您可能有多个项目。例如,这是一种非常常见的模式(非常常见以至于 ProjectScaffold repo 以这种方式设置,因为这是大多数人想要的)为您的主代码和测试创建一个单独的项目。在 MyApp.fsproj
文件中,您可能不想引用 NUnit 或 XUnit,但确实希望在 MyApp.Tests.fsproj
文件中包含这些引用。paket.dependencies
文件每个存储库一个,它列出了存储库中任何项目想要使用的所有包。 paket.references
文件,复数,每个项目一个,并与它们对应的 .fsproj
文件位于同一目录中。它们列出了该项目想要引用的包。因此,在与 paket.references
位于同一目录中的 MyApp.Tests.fsproj
文件中,您将列出 NUnit 或 XUnit — 但您不会在与 paket.references
位于同一目录中的 MyApp.fsproj
文件中列出单元测试库。
如果您的 Git 存储库中只有一个项目,那么就不需要单独的 paket.dependencies
和 paket.references
文件,因为它们可以组合成一个文件来实现这两个目的。但是一旦您在单个存储库中有多个 .fsproj
文件,那么依赖项和引用之间的分离就变得有用了,因为您可以将所有依赖项列在存储库根目录中的单个 paket.dependencies
文件中,但为每个项目提供自己的 paket.references
文件这样它就可以只引用它特别需要的依赖项子集。
关于Java 开发人员需要帮助理解 F# 中的 .NET 构建过程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43019579/