F# is sensitive to module build order, requiring that you build your modules in "depth first" dependency tree order. That is, if you have a project where module A depends on module B, and B depends on C and D, you must build C and D first, then B, then A. Otherwise, you're likely to get undefined symbol errors.
To address this need, #develop has a context menu option on files in the Projects pane, letting you move a file up and down in the project file. This feature is quite buggy:
- When you move a file, it then asks if you want to reload the solution, claiming it has changed on disk, as if you had made the change in a separate text editor. It should just make the change in place.
- If you tell it "no, don't reload", it behaves as you expect: the file list order changes, and the build order changes.
- If you tell it "yes" instead, the file doesn't appear to have moved in the file list, because it always alphabetizes the list, even when the underlying .fsproj file has the entries in a different order.
- Because of the persistent alphabetization, you can't glance at your Projects tree and see the module build order.
I've taken to hand-hacking the .fsproj file in a text editor. Pehaps this strikes you as evil and wrong, but it works. :)
I suspect the fix is pretty simple. First, the yes/no/cancel dialog doesn't seem to do anything helpful, so you may be able to just remove it. Second, turn off alphabetization for F# projects.