dotnet-websharper / core

WebSharper - Full-stack, functional, reactive web apps and microservices in F# and C#
https://websharper.com
Apache License 2.0
594 stars 52 forks source link

Error when compiling Could not load file or assembly System.Runtime #1055

Closed CtrlShiftEscape closed 3 years ago

CtrlShiftEscape commented 5 years ago
WebSharper error FS9001 : Global error : System.IO.FileLoadException: Could not load file or assembly 'System.Runtime, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Could not find or load a specific file. (Exception from HRESULT: 0x80131621)↔File name: 'System.Runtime, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' ---> System.IO.FileLoadException: Could not load file or assembly 'System.Runtime, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL'.↔   at System.Runtime.Loader.AssemblyLoadContext.LoadFromPath(IntPtr ptrNativeAssemblyLoadContext, String ilPath, String niPath, ObjectHandleOnStack retAssembly)↔   at System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyPath(String assemblyPath)↔   at System.Reflection.Assembly.LoadFrom(String assemblyFile)↔   at WebSharper.FSharp.Program.assemblyResolveHandler@160.Invoke(Object _arg1, ResolveEventArgs e)↔   at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)↔   at System.ModuleHandle.ResolveType(RuntimeModule module, Int32 typeToken, IntPtr* typeInstArgs, Int32 typeInstCount, IntPtr* methodInstArgs, Int32 methodInstCount, ObjectHandleOnStack type)↔   at System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule module, Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)↔   at System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)↔   at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, MetadataImport scope, Assembly& lastAptcaOkAssembly, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, Boolean mustBeInheritable, Object[] attributes, IList derivedAttributes, RuntimeType& attributeType, IRuntimeMethodInfo& ctor, Boolean& ctorHasParameters, Boolean& isVarArg)↔   at System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule decoratedModule, Int32 decoratedMetadataToken, Int32 pcaCount, RuntimeType attributeFilterType, Boolean mustBeInheritable, IList derivedAttributes, Boolean isDecoratedTargetSecurityTransparent)↔   at System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeAssembly assembly, RuntimeType caType)↔   at System.Attribute.GetCustomAttributes(Assembly element, Type attributeType, Boolean inherit)↔   at System.Attribute.GetCustomAttribute(Assembly element, Type attributeType, Boolean inherit)↔   at <StartupCode$WebSharper-Sitelets-Offline>.$HtmlCommand.loadSite@55(AssemblyResolver aR, String file)↔   at <StartupCode$WebSharper-Sitelets-Offline>.$HtmlCommand.WebSharper-Compiler-HtmlCommand-IHtmlCommand-Execute@53.Invoke(Unit unitVar0)↔   at WebSharper.Compiler.AssemblyResolver.Wrap[T](FSharpFunc`2 action)↔   at WebSharper.Compiler.AssemblyResolver.Wrap[T](FSharpFunc`2 action)↔   at WebSharper.Compiler.CommandTools.ExecuteCommands.Html(WsConfig settings)↔   at WebSharper.FSharp.Program.Compile$cont@201-2(WsConfig config, Boolean isBundleOnly, Loader loader, FSharpList`1 refs, Task`1 wsRefsMeta, Compilation comp, Unit unitVar)↔   at WebSharper.FSharp.Program.Compile$cont@70(WsConfig config, WarnSettings warnSettings, String thisName, Unit unitVar)↔   at WebSharper.FSharp.Program.compileMain$cont@304(String[] argv, Unit unitVar)↔   at WebSharper.FSharp.Program.main(String[] argv)

Project is created using dotnet new websharper-html

granicz commented 5 years ago

What .NET Core do you have installed? Can you post your output for dotnet --info?

CtrlShiftEscape commented 5 years ago
.NET Core SDK (reflecting any global.json):
 Version:   3.0.100-preview-009812
 Commit:    e3abf6e935

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.17763
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.0.100-preview-009812\

Host (useful for support):
  Version: 3.0.0-preview-27122-01
  Commit:  00c5c8bc40

.NET Core SDKs installed:
  2.1.104 [C:\Program Files\dotnet\sdk]
  2.1.200 [C:\Program Files\dotnet\sdk]
  2.1.201 [C:\Program Files\dotnet\sdk]
  2.1.202 [C:\Program Files\dotnet\sdk]
  2.1.301 [C:\Program Files\dotnet\sdk]
  2.1.400 [C:\Program Files\dotnet\sdk]
  2.1.401 [C:\Program Files\dotnet\sdk]
  2.1.402 [C:\Program Files\dotnet\sdk]
  2.1.403 [C:\Program Files\dotnet\sdk]
  2.1.500 [C:\Program Files\dotnet\sdk]
  2.1.502 [C:\Program Files\dotnet\sdk]
  2.1.503 [C:\Program Files\dotnet\sdk]
  2.1.504 [C:\Program Files\dotnet\sdk]
  2.1.505 [C:\Program Files\dotnet\sdk]
  2.1.600 [C:\Program Files\dotnet\sdk]
  2.1.602 [C:\Program Files\dotnet\sdk]
  2.2.104 [C:\Program Files\dotnet\sdk]
  3.0.100-preview-009812 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.0.0-preview-18579-0056 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.0.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.3-servicing-26724-03 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.0.0-preview-27122-01 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.0.0-alpha-27128-4 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

Project is netcoreapp2.2

granicz commented 5 years ago

Just out of curiousity, what's the version on your System.Runtime in your SDK?

CtrlShiftEscape commented 5 years ago

Where can I view it?

Jand42 commented 5 years ago

Hi, @CtrlShiftEscape, I have been testing latest templates on SDK 3.0.100-preview3-010431 without problems. Can you update your SDK to preview3 or latest preview4 and tell if the issue persists? Thanks.

yetanotherlogonfail commented 5 years ago

Adam and Jand42, if you are asking for peeps here to do something else to determine a version or setting value of extracting output from .netcore, please provide a link or the instructions of how to get this info, just as in code when you f12 to another function, then f12 again to the next function, ANY additional steps reduces the chances of user following your advice and thus increases the chance users will seek alternate solutions. I too failed to get this git solution to compile, my solution -> look at Giraffe it seems to work. Especially when looking at leading edge stuff like this it is silly for it not to compile. MOST people are going to be put off by it not working out of the box. DO NOT ADD any more features at all fix the basics and this type of solution might grow. Sorry to be so harsh but after failing to get Xamarin to compile out of the box, and fable and websharper I’m feeling much much less love for F# and my company projects get C# approval time after time; even python and java solutions have been approved when a func approach would have been preferable. You’re the leaders with this software, do it right, please.

Jand42 commented 5 years ago

@yetanotherlogonfail Hi, here are the .NET Core 3.0 preview releases, they are not auto-updated by the VS2019 installer https://dotnet.microsoft.com/download/dotnet-core/3.0 I have been testing the last release with preview3 on Win 64bit, will try some others.

Having a global.json file can fix down your SDK that is being used, to go back to stable 2.2, create it with:

{
  "sdk": {
    "version": "2.2.104"
  }
}
mjarosie commented 4 years ago

I'm running into the same issue. Steps to reproduce:

dotnet new websharper-html -lang f# -n test-html
cd test-html

Then after modifying the <TargetFramework> value in test-html.fsproj from netstandard2.0 to netcoreapp3.1:

dotnet restore
dotnet run

Full error that I'm getting:

WebSharper error FS9001 : Global error : System.IO.FileLoadException: Could not load file or assembly 'System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Could not find or load a specific file. (Exception from HRESULT: 0x80131621)
File name: 'System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' ---> System.IO.FileLoadException: Could not load file or assembly 'System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL'.
   at System.Runtime.Loader.AssemblyLoadContext.LoadFromPath(IntPtr ptrNativeAssemblyLoadContext, String ilPath, String niPath, ObjectHandleOnStack retAssembly)
   at System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyPath(String assemblyPath)
   at System.Reflection.Assembly.LoadFrom(String assemblyFile)
   at WebSharper.FSharp.Program.assemblyResolveHandler@154.Invoke(Object _arg1, ResolveEventArgs e)
   at System.AppDomain.InvokeResolveEvent(ResolveEventHandler eventHandler, RuntimeAssembly assembly, String name)
   at System.ModuleHandle.ResolveType(RuntimeModule module, Int32 typeToken, IntPtr* typeInstArgs, Int32 typeInstCount, IntPtr* methodInstArgs, Int32 methodInstCount, ObjectHandleOnStack type)
   at System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule module, Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)
   at System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
   at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, MetadataImport scope, Assembly& lastAptcaOkAssembly, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, Boolean mustBeInheritable, Object[] attributes, IList derivedAttributes, RuntimeType& attributeType, IRuntimeMethodInfo& ctor, Boolean& ctorHasParameters, Boolean& isVarArg)
   at System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule decoratedModule, Int32 decoratedMetadataToken, Int32 pcaCount, RuntimeType attributeFilterType, Boolean mustBeInheritable, IList derivedAttributes)
   at System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeAssembly assembly, RuntimeType caType)
   at System.Attribute.GetCustomAttributes(Assembly element, Type attributeType, Boolean inherit)
   at System.Attribute.GetCustomAttribute(Assembly element, Type attributeType, Boolean inherit)
   at <StartupCode$WebSharper-Sitelets-Offline>.$HtmlCommand.loadSite@55(AssemblyResolver aR, String file)
   at <StartupCode$WebSharper-Sitelets-Offline>.$HtmlCommand.WebSharper-Compiler-HtmlCommand-IHtmlCommand-Execute@53.Invoke(Unit unitVar0)
   at WebSharper.Compiler.AssemblyResolver.Wrap[T](FSharpFunc`2 action)
   at WebSharper.Compiler.AssemblyResolver.Wrap[T](FSharpFunc`2 action)
   at WebSharper.Compiler.CommandTools.ExecuteCommands.Html(WsConfig settings)
   at WebSharper.FSharp.Program.Compile$cont@202-2(WsConfig config, Boolean isBundleOnly, Loader loader, FSharpList`1 refs, Task`1 wsRefsMeta, Compilation comp, Unit unitVar)
   at WebSharper.FSharp.Program.Compile$cont@64(WsConfig config, WarnSettings warnSettings, String thisName, Unit unitVar)
   at WebSharper.FSharp.Program.compileMain$cont@310(String[] argv, Unit unitVar)
   at WebSharper.FSharp.Program.main(String[] argv) [C:\source\GoSwimmingly\playground\test-html\test-html.fsproj]

The build failed. Fix the build errors and run again.

Output of dotnet --version: 3.1.300

Output of dotnet --info:

.NET Core SDK (reflecting any global.json):
 Version:   3.1.300
 Commit:    b2475c1295

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.18363
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.1.300\

Host (useful for support):
  Version: 3.1.4
  Commit:  0c2e69caa6

.NET Core SDKs installed:
  3.1.201 [C:\Program Files\dotnet\sdk]
  3.1.300 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.18 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.18 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.1.18 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.1.3 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 3.1.4 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

I don't know how to check what's the version of System.Runtime of the SDK, googling didn't point anywhere.

yetanotherlogonfail commented 4 years ago

Forgot I posted this, im afraid to say that, I should read the book my son bought me more often and take its advice. "Move fast and break things". I didnt move fast enough with F#, and as a result spent way too long getting data with nulls to work and then dealing with the the fact that a language that does not automatically import namespaces, references etc for you is doomed. Giraffe was fab and worked but alas the MS bolier plate of even that was too much for me in the end. I now produce my endpoints in Go/Golang, if fast simple and just works out of the box. My original point I made here STILL applies if anyone posts an example and I mean ANYONE. it must work, out of the box nothing to be added, or else you will find folks giving up- on what maybe a fantastic solution but if you cant step through the example and see it working, it will go the way of F#. condemed in history as another failed startup.

granicz commented 4 years ago

@yetanotherlogonfail I would love to take the "move things fast and break things" advice, and keep WebSharper and its libs on the latest netstandard/netcore and SDKs - and just switch the maintenance burden to end users then having to update their own stack constantly. But I doubt anyone would like that. We are juggling a ~100 lib ecosystem, all on a constantly moving netcore, on several OSs. Somewhere in that hierarchy, there is a mismatch with a reference. Let's find it. If anyone has info that can help, it will be quicker. This came up on the WebSharper gitter too, so I think we will have a good grip on it soon. That said, this issue got way less attention it should have, because other priorities got in the way. But rest assured, your voice is heard loud and clear.

Jand42 commented 4 years ago

@CtrlShiftEscape @mjarosie @yetanotherlogonfail Sorry for the very long turnaround, I am now taking a hard look at the netcoreapp3.1 assembly redirection issues. Some WebSharper functionality such as outputting offline sitelets and locally defined macros make the compiler load the freshly compiled assembly dynamically, and the compiler for netcore is still running on netcoreapp2.0. I have tried playing around with assembly redirection in config (having no upper bounds) with no success, currently testing to multi-target the netcore wsfsc between netcoreapp2.0 (used for netstandard2.0 and netcoreapp2.x) and netcoreapp3.1 (used for netstandard2.1 and netcoreapp3.x) I think that would solve it while breaking no existing build scenarios.

Jand42 commented 4 years ago

Switched to using netcoreapp3.1 for compilation with https://github.com/dotnet-websharper/core/releases/tag/4.6.4.404 I have tested Docker build with 3.1 sdk only and targeting aspnetcore3.1, built and started successfully.

granicz commented 4 years ago

Hi @CtrlShiftEscape @mjarosie, can you retry and let me know if you are still running into this issue?

mjarosie commented 4 years ago

@granicz I just checked, it works! : )