Skip to content

Instantly share code, notes, and snippets.

@haf
Created March 9, 2013 22:08
Show Gist options
  • Select an option

  • Save haf/5125959 to your computer and use it in GitHub Desktop.

Select an option

Save haf/5125959 to your computer and use it in GitHub Desktop.
There are three versions of F#.
2.0. 3.0, the open source version. 3.0, the Visual Studio version. Wtf?
During compile time, there is F# assembly version 2.0. There is F# assembly
version 4.0 and F# assembly version 4.3. The assembly version 4.0 runs on
WinRT/.Net 4.5 and is F# 2.0. The assembly version 4.3 runs on WinRT/.Net 4.5
and is F# 3.0. Wtf?
Then there's GAC 2.0 that can contain the above F# 2.0. This GAC doesn't know
about GAC 4.0:
And GAC 4.0 that knows about GAC 2.0 and loads from there. F# assembly version
4.0 is incompatible with F# assembly version 2.0, except that all public APIs
are identical, so it is possible to rebind. Which GAC 4.0 does: when e.g. F#
PowerPack wants F# version 2.0, assembly version 2.0, GAC 4.0 rebinds F# 2.0
asmver 2.0 to asmver 4.0 and reports OK; except now, there's no way to properly
redistribute your program anymore.
Oh, and there's an exe called 'Microsoft Visual Studio 2010 F# Runtime 2.0'
(WTF??!) which is F# 2.0 asmver 4.0 for .Net 4.0 which isn't .Net 4.0 but
actually .Net 4.5/WinRT in compatibility mode with bugfixes over .Net 4.0. Worth
mentioning is that the 'Microsoft Visual Studio 2010 F# Runtime 2.0' also
installs F# 2.0 asmver 4.0 for Visual Studio 2012, aka VS11.
Mushrooms are served on 1 Microsoft Way tomorrow.
[1]: www.microsoft.com/downloads/details.aspx?FamilyID=5f0a79f8-925f-4297-9ae2-86e2fdcff33c&displaylang=en
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment