dotnet / dotnet/fsharp

Registering experience of fresh build of FSharp.sln on fresh machine

Open
#17,125 8 comments 0 reactions 0 assignees View on GitHub
Contributor Pain
Dominant language
F#
Stars
4.3k
Forks
876
Avg merge
4d 22h
Merged PRs (30d)
144

Description

I've had working installations of this repo for several years, but recently installed a new workstation and I was wondering how it would go.

It is a lot smoother than it was back in the day, but there are still some things that don't quite work as expected and/or could be improved. Mostly: doing as instructed won't "just work".

System:

* Windows latest
* Visual Studio RTM latest
* .NET 6.0 and .NET 8.0 SDKs.

### First attempt

Trying to be naive:

1. Checkout `main`, run `build.cmd` --> success
2. Open `FSharp.sln` in Visual Studio
* first time, asks for SDK and .NET Framework to be installed (as expected from instructions)
* lot's of errors that .NET SDK cannot be found.
3. Build in Visual Studio: fails without showing details
4. Running `dotnet tool restore` in the root --> error: "The command could not be loaded" (I assume because of `global.json`)

### Second attempt

A little less naive. I ran the following command to install .NET Preview (not in [devguide.md](https://github.com/dotnet/fsharp/blob/main/DEVGUIDE.md), but there they do say you need a specific Preview version):

```cmd
winget install Microsoft.DotNet.SDK.Preview
```

1. Open `FSharp.sln` in Visual Studio --> less errors
2. Ctrl-Shift-B (build all) in Visual Studio: fails three projects, something about resources missing (`fsi`, `fsc` and `Compiler.Service.Tests`). Sorry, forgot to copy the error.
4. Running `dotnet tool restore` in the root --> success

Then: closed Visual Studio, reopen it again, and recompile. This time success.

Error window shows 630 errors, all of them this:

![image](https://github.com/dotnet/fsharp/assets/16015770/03332e8c-21c4-4d27-9a05-509c4dda4c3f)

-----

All in all, not too bad. right? I can easily work with and work around these errors, and as mentioned, it is much better than in the (far) past. But I think we can still improve.

My proposal would be something like:

* auto-install the .NET version (there's an interactive Y/N question, so people can always deny it), if the requested version is not there. Unless this is considered too intrusive.
* fix the "This construct is deprecated: it is only for use in the F# library" error to pop up (I assume others see this too, no? Or is this a setting in the project or in Visual Studio? It does not prevent building the solution, though.

Still a little surprised though that building through `build.cmd` goes fine, but building through Visual Studio does not, and requires .NET SDK Preview to be installed globally. Esp because the logs clearly show this, suggesting that it has been installed successfully:

```
GET https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.ps1
Attempting to install 'sdk v9.0.100-preview.3.24204.13' from public location.
dotnet-install: Remote file https://dotnetcli.azureedge.net/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-win-x64.zip size is 309190459 bytes.dotnet-install: Downloaded file https://dotnetcli.azureedge.net/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-win-x64.zip size is 309190459 bytes.
dotnet-install: The remote and local file sizes are equal.
dotnet-install: Extracting the archive.
dotnet-install: Adding to current process PATH: "D:\projects\OpenSource\fsharp\.dotnet\". Note: This change will not be visible if PowerShell was run as a child process.
dotnet-install: Note that the script does not resolve dependencies during installation.
dotnet-install: To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install/windows#dependencies
dotnet-install: Installed version is 9.0.100-preview.3.24204.13
dotnet-install: Installation finished
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.