Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Netstandard 2.0 #291

Closed

Conversation

vasily-kirichenko
Copy link
Contributor

No description provided.

@smoothdeveloper
Copy link
Collaborator

We need to make sure we don't preclude usage from FSI dotnet/fsharp#3309

@vasily-kirichenko
Copy link
Contributor Author

@smoothdeveloper I think it will be version 2.0 with no FSI for now.

@smoothdeveloper
Copy link
Collaborator

We need to support multiple targets, netstandard doesn't work at all with VS2015, FSI.

I don't know what is the best way to deal with that but it seems having separate fsproj could be a solution.

I understand that having the provider work on .net core is a priority but we need to keep the library working for full framework and scripting scenarios.

@vasily-kirichenko
Copy link
Contributor Author

@smoothdeveloper <TargetFrameworks>netstandard20;net45</TargetFrameworks> should just work.

@vasily-kirichenko
Copy link
Contributor Author

vasily-kirichenko commented May 11, 2018

Current status:

  • SqlClient project compiles for netstandard20
  • Using it in SqlClient.Test (also targets netstandard20) causes lots of exceptions, for example:

image

note the Mono.Data.Tds assembly above o_O

Build has different errors like this:

TypeProviderTest.fs(12, 23): [FS3033] The type provider 'FSharp.Data.SqlCommandProvider' reported an error: Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=4.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies.

(it's all on MacOS)

@vasily-kirichenko
Copy link
Contributor Author

OK, the problem with loading System.Configuration was my mistake - an old FSharp.Configuration was referenced, which does not support netstandard, however 2.0.0-alpha works ok, it does not support AppConfig TP, so I've dropped the reference at all.

Now I have different errors at design/compile time:

Error | FS3033 | The type provider 'FSharp.Data.SqlCommandProvider' reported an error: Could not load file or assembly 'System.Data.SqlClient, Version=4.2.0.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. Reference assemblies should not be loaded for execution.  They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)
| SqlClient.Tests | C:\git\FSharp.Data.SqlClient\src\SqlClient.Tests\ConfigurationTest.fs | 14 | Active

@vasily-kirichenko
Copy link
Contributor Author

So, the TP is trying to load the System.Data.SqlClient reference assembly:

image

and fails with the above error.

There is a (full? impl?) assembly in the nuget cache:

image

It seems it should load this one.

@dsyme could you please help?

@vasily-kirichenko
Copy link
Contributor Author

/cc @baronfel

@vasily-kirichenko
Copy link
Contributor Author

vasily-kirichenko commented May 12, 2018

 >	FSharp.Data.SqlClient.dll!<StartupCode$FSharp-Data-SqlClient>[email protected](string typeName, object[] args) Line 58	F#
 	FSharp.Data.SqlClient.dll!<StartupCode$FSharp-Data-SqlClient>[email protected](Microsoft.FSharp.Core.FSharpFunc<string, Microsoft.FSharp.Core.FSharpFunc<object[], ProviderImplementation.ProvidedTypes.ProvidedTypeDefinition>> f, string s, object[] p) Line 8821	F#
 	FSharp.Data.SqlClient.dll!ProviderImplementation.ProvidedTypes.TypeProviderForNamespaces.Microsoft.FSharp.Core.CompilerServices.ITypeProvider.Microsoft-FSharp-Core-CompilerServices-ITypeProvider-ApplyStaticArguments(System.Type ty, string[] typePathAfterArguments, object[] objs) Line 14400	F#
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.ExtensionTyping.TryApplyProvidedType@1165-1.Invoke(System.Tuple<Microsoft.FSharp.Compiler.ExtensionTyping.ProvidedType, Microsoft.FSharp.Core.CompilerServices.ITypeProvider> tupledArg)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.Tainted<System.__Canon>.Protect<System.__Canon>(Microsoft.FSharp.Core.FSharpFunc<System.__Canon, System.__Canon> f, Microsoft.FSharp.Compiler.Range.range range)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.Tainted<Microsoft.FSharp.Compiler.ExtensionTyping.ProvidedType>.PApplyWithProvider<Microsoft.FSharp.Compiler.ExtensionTyping.ProvidedType>(Microsoft.FSharp.Core.FSharpFunc<System.Tuple<Microsoft.FSharp.Compiler.ExtensionTyping.ProvidedType, Microsoft.FSharp.Core.CompilerServices.ITypeProvider>, Microsoft.FSharp.Compiler.ExtensionTyping.ProvidedType> f, Microsoft.FSharp.Compiler.Range.range range)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.ExtensionTyping.TryApplyProvidedType(Microsoft.FSharp.Compiler.Tainted<Microsoft.FSharp.Compiler.ExtensionTyping.ProvidedType> typeBeforeArguments, Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Collections.FSharpList<string>> optGeneratedTypePath, object[] staticArgs, Microsoft.FSharp.Compiler.Range.range m)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcProvidedTypeAppToStaticConstantArgs(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Collections.FSharpList<string>> optGeneratedTypePath, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Tast.EntityRef tcref, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Ast.SynType> args, Microsoft.FSharp.Compiler.Range.range m)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcProvidedTypeApp(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Tast.EntityRef tcref, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Ast.SynType> args, Microsoft.FSharp.Compiler.Range.range m)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcTypeApp(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.TypeChecker.ImplictlyBoundTyparsAllowed newOk, Microsoft.FSharp.Compiler.TypeChecker.CheckConstraints checkCxs, Microsoft.FSharp.Compiler.NameResolution.ItemOccurence occ, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Range.range m, Microsoft.FSharp.Compiler.Tast.EntityRef tcref, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.TType> pathTypeArgs, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Ast.SynType> synArgTys)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcTypeOrMeasure$cont@4553(Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Compiler.Tast.TyparKind> optKind, Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.TypeChecker.ImplictlyBoundTyparsAllowed newOk, Microsoft.FSharp.Compiler.TypeChecker.CheckConstraints checkCxs, Microsoft.FSharp.Compiler.NameResolution.ItemOccurence occ, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Ast.Ident> tc, bool postfix, Microsoft.FSharp.Compiler.Range.range m, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Ast.SynType> args, Microsoft.FSharp.Core.Unit unitVar)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcExprUndelayed(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.Tast.TType overallTy, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Ast.SynExpr expr)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcExpr(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.Tast.TType ty, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Ast.SynExpr expr)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcExprThatCantBeCtorBody(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.Tast.TType overallTy, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Ast.SynExpr expr)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.f@506-18(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Compiler.Tast.Val> safeThisValOpt, Microsoft.FSharp.Compiler.TypeChecker.SafeInitData safeInitInfo, Microsoft.FSharp.Compiler.Ast.SynExpr rhsExpr, Microsoft.FSharp.Compiler.Tast.TType overallExprTy, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv envinner, bool isCtor, Microsoft.FSharp.Core.Unit unitVar0)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcNormalizedBinding(Microsoft.FSharp.Compiler.TypeChecker.DeclKind declKind, Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Tast.TType overallTy, Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Compiler.Tast.Val> safeThisValOpt, Microsoft.FSharp.Compiler.TypeChecker.SafeInitData safeInitInfo, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.Typar> enclosingDeclaredTypars, Microsoft.FSharp.Compiler.TypeChecker.ExplicitTyparInfo _arg9, Microsoft.FSharp.Compiler.TypeChecker.NormalizedBinding bind)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcNonRecursiveBinding(Microsoft.FSharp.Compiler.TypeChecker.DeclKind declKind, Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Tast.TType ty, Microsoft.FSharp.Compiler.Ast.SynBinding b)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcLetBinding@10722.Invoke(Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Ast.SynBinding b)	Unknown
 	FSharp.Core.dll!Microsoft.FSharp.Primitives.Basics.List.mapFold<Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv, Microsoft.FSharp.Compiler.Ast.SynBinding, Microsoft.FSharp.Compiler.TypeChecker.CheckedBindingInfo>(Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv, Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Compiler.Ast.SynBinding, System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.CheckedBindingInfo, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv>>> f, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv acc, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Ast.SynBinding> xs)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcLetBinding(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, bool isUse, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.ContainerInfo containerInfo, Microsoft.FSharp.Compiler.TypeChecker.DeclKind declKind, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Ast.SynBinding> binds, Microsoft.FSharp.Compiler.Range.range bindsm, Microsoft.FSharp.Compiler.Range.range scopem)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcLinearExprs(Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Compiler.Tast.TType, Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv, Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Compiler.Ast.SynExpr, System.Tuple<Microsoft.FSharp.Compiler.Tast.Expr, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv>>>>> bodyChecker, Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.Tast.TType overallTy, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, bool isCompExpr, Microsoft.FSharp.Compiler.Ast.SynExpr expr, Microsoft.FSharp.Core.FSharpFunc<System.Tuple<Microsoft.FSharp.Compiler.Tast.Expr, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv>, System.Tuple<Microsoft.FSharp.Compiler.Tast.Expr, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv>> cont)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcExpr(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.Tast.TType ty, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Ast.SynExpr expr)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcIteratedLambdas(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, bool isFirst, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.Tast.TType overallTy, Microsoft.FSharp.Collections.FSharpSet<string> takenNames, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Ast.SynExpr e)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcIteratedLambdas(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, bool isFirst, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.Tast.TType overallTy, Microsoft.FSharp.Collections.FSharpSet<string> takenNames, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Ast.SynExpr e)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcExprUndelayed(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.Tast.TType overallTy, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Ast.SynExpr expr)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcExpr(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.Tast.TType ty, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Ast.SynExpr expr)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcExprThatCantBeCtorBody(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.Tast.TType overallTy, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Ast.SynExpr expr)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.f@506-18(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Compiler.Tast.Val> safeThisValOpt, Microsoft.FSharp.Compiler.TypeChecker.SafeInitData safeInitInfo, Microsoft.FSharp.Compiler.Ast.SynExpr rhsExpr, Microsoft.FSharp.Compiler.Tast.TType overallExprTy, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv envinner, bool isCtor, Microsoft.FSharp.Core.Unit unitVar0)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcNormalizedBinding(Microsoft.FSharp.Compiler.TypeChecker.DeclKind declKind, Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Tast.TType overallTy, Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Compiler.Tast.Val> safeThisValOpt, Microsoft.FSharp.Compiler.TypeChecker.SafeInitData safeInitInfo, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.Typar> enclosingDeclaredTypars, Microsoft.FSharp.Compiler.TypeChecker.ExplicitTyparInfo _arg9, Microsoft.FSharp.Compiler.TypeChecker.NormalizedBinding bind)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcNonRecursiveBinding(Microsoft.FSharp.Compiler.TypeChecker.DeclKind declKind, Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Tast.TType ty, Microsoft.FSharp.Compiler.Ast.SynBinding b)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcLetBinding@10722.Invoke(Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Compiler.Ast.SynBinding b)	Unknown
 	FSharp.Core.dll!Microsoft.FSharp.Primitives.Basics.List.mapFold<Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv, Microsoft.FSharp.Compiler.Ast.SynBinding, Microsoft.FSharp.Compiler.TypeChecker.CheckedBindingInfo>(Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv, Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Compiler.Ast.SynBinding, System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.CheckedBindingInfo, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv>>> f, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv acc, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Ast.SynBinding> xs)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcLetBinding(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, bool isUse, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.ContainerInfo containerInfo, Microsoft.FSharp.Compiler.TypeChecker.DeclKind declKind, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Ast.SynBinding> binds, Microsoft.FSharp.Compiler.Range.range bindsm, Microsoft.FSharp.Compiler.Range.range scopem)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcLetBindings(Microsoft.FSharp.Compiler.TypeChecker.cenv cenv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv env, Microsoft.FSharp.Compiler.TypeChecker.ContainerInfo containerInfo, Microsoft.FSharp.Compiler.TypeChecker.DeclKind declKind, Microsoft.FSharp.Compiler.TypeChecker.SyntacticUnscopedTyparEnv tpenv, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Ast.SynBinding> binds, Microsoft.FSharp.Compiler.Range.range bindsm, Microsoft.FSharp.Compiler.Range.range scopem)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.TypeChecker.TcModuleOrNamespaceElementNonMutRec@16607-1.Invoke(Microsoft.FSharp.Core.Unit unitVar)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.catch@859-1<System.Tuple<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>, Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.ResultOrException<System.Tuple<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<Microsoft.FSharp.Collections.FSharpList<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>, System.Tuple<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>, System.Tuple<Microsoft.FSharp.Collections.FSharpList<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>, System.Tuple<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.catch@859-1<System.Tuple<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>, Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.ResultOrException<System.Tuple<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<Microsoft.FSharp.Collections.FSharpList<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>, System.Tuple<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>, System.Tuple<Microsoft.FSharp.Collections.FSharpList<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>, System.Tuple<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.catch@859-1<System.Tuple<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>, Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.ResultOrException<System.Tuple<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<Microsoft.FSharp.Collections.FSharpList<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>, System.Tuple<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>, System.Tuple<Microsoft.FSharp.Collections.FSharpList<System.Tuple<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr>>, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Compiler.Tast.TypedImplFile, Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, bool>, System.Tuple<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceExpr, Microsoft.FSharp.Collections.FSharpList<System.Tuple<System.AttributeTargets, Microsoft.FSharp.Compiler.Tast.Attrib>>, Microsoft.FSharp.Compiler.TypeChecker.TcEnv>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Compiler.Tast.TypedImplFile>, Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType>, Microsoft.FSharp.Compiler.CompileOps.TcState>, System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Compiler.Tast.TypedImplFile, Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType, Microsoft.FSharp.Compiler.TypeChecker.TcEnv, bool>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.catch@859-1<System.Tuple<System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Compiler.Tast.TypedImplFile>, Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType>, Microsoft.FSharp.Compiler.CompileOps.TcState>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Compiler.Tast.TypedImplFile>, Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType>, Microsoft.FSharp.Compiler.CompileOps.TcState>, Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.ResultOrException<System.Tuple<System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Compiler.Tast.TypedImplFile>, Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType>, Microsoft.FSharp.Compiler.CompileOps.TcState>>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.bind@850-1<System.Tuple<System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.TypedImplFile>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType>>, Microsoft.FSharp.Compiler.CompileOps.TcState>, System.Tuple<System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Compiler.Tast.TypedImplFile>, Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType>, Microsoft.FSharp.Compiler.CompileOps.TcState>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.loop@822-22<Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken, System.Tuple<System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.TypedImplFile>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType>>, Microsoft.FSharp.Compiler.CompileOps.TcState>>(long timeShareInMilliseconds, System.Threading.CancellationToken ct, Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken, Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken, Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.Eventually<System.Tuple<System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.TypedImplFile>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType>>, Microsoft.FSharp.Compiler.CompileOps.TcState>>>, Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.Eventually<System.Tuple<System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.TypedImplFile>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType>>, Microsoft.FSharp.Compiler.CompileOps.TcState>>>> runner, System.Diagnostics.Stopwatch sw, Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok, Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.Eventually<System.Tuple<System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.TypedImplFile>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType>>, Microsoft.FSharp.Compiler.CompileOps.TcState>> ev2)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.EventuallyModule.loop@822-23<System.Tuple<System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.TypedImplFile>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType>>, Microsoft.FSharp.Compiler.CompileOps.TcState>, Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok, Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.Eventually<System.Tuple<System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.TypedImplFile>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType>>, Microsoft.FSharp.Compiler.CompileOps.TcState>> ev2)	Unknown
 	FSharp.Compiler.Private.dll!Microsoft.FSharp.Compiler.SourceCodeServices.Parser.CheckOneFile@1714-19.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!<StartupCode$FSharp-Compiler-Private>.$Reactor.EnqueueAndAwaitOpAsync@174-2<Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.Eventually<System.Tuple<System.Tuple<Microsoft.FSharp.Compiler.TypeChecker.TcEnv, Microsoft.FSharp.Compiler.TypeChecker.TopAttribs, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.TypedImplFile>, Microsoft.FSharp.Collections.FSharpList<Microsoft.FSharp.Compiler.Tast.ModuleOrNamespaceType>>, Microsoft.FSharp.Compiler.CompileOps.TcState>>>.Invoke(Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.CompilationThreadToken ctok)	Unknown
 	FSharp.Compiler.Private.dll!<StartupCode$FSharp-Compiler-Private>[email protected](Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Compiler.SourceCodeServices.ReactorCommands> _arg2)	Unknown
 	FSharp.Core.dll!Microsoft.FSharp.Control.AsyncBuilderImpl.args@471-1<Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Compiler.SourceCodeServices.ReactorCommands>, Microsoft.FSharp.Core.Unit>.Invoke(Microsoft.FSharp.Core.FSharpOption<Microsoft.FSharp.Compiler.SourceCodeServices.ReactorCommands> a)	Unknown
 	FSharp.Core.dll!<StartupCode$FSharp-Core>.$Control.loop@124-50(Microsoft.FSharp.Control.Trampoline this, Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Core.Unit, Microsoft.FSharp.Control.FakeUnitValue> action)	Unknown
 	FSharp.Core.dll!Microsoft.FSharp.Control.Trampoline.ExecuteAction(Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Core.Unit, Microsoft.FSharp.Control.FakeUnitValue> firstAction)	Unknown
 	FSharp.Core.dll!Microsoft.FSharp.Control.TrampolineHolder.Protect(Microsoft.FSharp.Core.FSharpFunc<Microsoft.FSharp.Core.Unit, Microsoft.FSharp.Control.FakeUnitValue> firstAction)	Unknown
 	FSharp.Core.dll!<StartupCode$FSharp-Core>[email protected](object o)	Unknown
 	mscorlib.dll!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(object state)	Unknown
 	mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx)	Unknown
 	mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx)	Unknown
 	mscorlib.dll!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()	Unknown
 	mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch()	Unknown
 	mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()	Unknown

@vasily-kirichenko
Copy link
Contributor Author

@Thorium thanks!

On compile time everything is net451, as F# compiler uses that to compile .NET Standard libraries. There are also some .NET dlls included from the Microsoft.NET.Build.Extensions\net461 in the NuGet package.

Yes, some dlls are copied to netstandard2.0 dir:

https://github.com/fsprojects/SQLProvider/blob/da69ab16ff242f64ab3d65d10d1277a5ae1e34d2/build.fsx#L182-L189

Why not to .net451 dir?

SQLProvider is erasing type provider so Providedtypes.fs and design-time things are excluded from the .NET Standard build.

How so?? I see all the providedtypes.xxx files are included:

https://github.com/fsprojects/SQLProvider/blob/da69ab16ff242f64ab3d65d10d1277a5ae1e34d2/src/SQLProvider.Standard/SQLProvider.Standard.fsproj#L19-L27

On runtime you use netstandard build of SQLProvider.

How do you achieve this if you've copied System.Data.SqlClient.dll and others to netstandard2.0 dir? I don't get it.

@Thorium
Copy link
Member

Thorium commented May 14, 2018

Sorry, you are correct, I replied by the earliest design, which have been changed after ProvidedTypes.fs updates. :-)
The trick here is that you have to have both versions of the dll. E.g. with SQLProvider, even though other dlls in netstandard2.0 are net451, the SQLProvider dll itself is netstandard build.
I haven't yet found any zero-configuration-out-of-the-package working solution, it needs a manual step anyway from the user. See this: fsprojects/SQLProvider#547

@vasily-kirichenko
Copy link
Contributor Author

@Thorium thanks... Design time still works ok, but building now broken:

C:\WLCR\github\ConsoleApp4\ConsoleApp4\Program.fs(6,12): error FS3033: The type provider 'FSharp.Data.SqlCommandProvider' reported an error: Could not load file or assembly 'System.Data.Sql
Client, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Reference assemblies should not be loaded for execution.  They can only be loaded in the Reflection-only loader c
ontext. (Exception from HRESULT: 0x80131058) [C:\WLCR\github\ConsoleApp4\ConsoleApp4\ConsoleApp4.fsproj]

'System.Data.SqlClient is .net 461 (everywhere in the package).

Ideas?

@Thorium
Copy link
Member

Thorium commented May 14, 2018

Build of the type provider or build of the project that is using the type provider?
Your user has to have:
<PackageReference Include="System.Data.SqlClient" Version="4.4.0" /> and you should see that the file that will be in your user's bin-directory is netstandard2.0 and not net451.

@Thorium
Copy link
Member

Thorium commented May 14, 2018

Design-time is often cached (and depends a bit are you using VS2017 or VS code), so I would trust build more than design-time.

@vasily-kirichenko
Copy link
Contributor Author

Build of the type provider or build of the project that is using type provider?

The project that uses the TP.

@vasily-kirichenko
Copy link
Contributor Author

@Thorium I've looked closer to SQLProvider sources. Do I understand right that

  • Package must contain net451 build exactly (not net461, net462, etc.)
  • The net451 build must be built with dedicated, old-style project with plane msbuild (not with dotnet cli). Actually, I've tried to just change net462 target to net451 and Paket did not find versions for many packages for that target, does this why SQLProvider have the dedicated SQLProvider.fsproj instead of multitargeting in SQLProvider.Standard.fsproj?
  • System.Data.SqlClient.dll must be copied from net461 folder of its nuget package to netstandard2.0 folder of our nuget package
  • No other dlls should be added to the package

@Thorium
Copy link
Member

Thorium commented May 14, 2018

  • The reason we use net451 is that it is the first version where .NET transactions got async support. We just want to use the oldest possible for compatibility reasons.
  • When I initially started the .NET Core testing, the system wasn't stable enough to build .NET framework version and I wasn't happy that the dll it generated didn't match at all with the old project. I didn't know why it was different and I didn't want to break anything so I kept the old project for .NET framework. "Added support for .NET Core" shouldn't be a breaking change. We have enterprise users so I try to keep the update path as simple as possible.
  • System.Data.SqlClient has to be copied yes, at least Microsoft SQL Server needs it, other databases didn't so much, but you probably use Microsoft SQL Server anyway.
  • I don't know what the fourth point refers to. I tried to keep the dlls at minimum because I don't own them.

So as far as I know the points 1 and 2 are just historical coincidences.

@Thorium
Copy link
Member

Thorium commented May 14, 2018

Some general things:

  • To test the system I used to have a script that copies the built dlls to overwrite files in my local nuget cache. So I didn't have to configure nuget sources etc to try with different versions.
  • All the type-loading errors are usually that you are trying to use wrong version. If you use build-time .NET Framework and runtime .NET Standard then everything should be ok. e.g. weird errors like "String is unknown type" are usually because the mscorlib.dll and netstandard.dll are different.

Copy link
Member

@Thorium Thorium left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would almost like to see some kind of resolver in TypeProvider SDK level, as this is so common, almost all type providers need at least some references.

Copy link
Member

@Thorium Thorium left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would almost like to see some kind of resolver in TypeProvider SDK level, as this is so common, almost all type providers need at least some references.

# Conflicts:
#	.paket/Paket.Restore.targets
#	.paket/paket.bootstrapper.exe
#	build.cmd
#	build.fsx
#	paket.dependencies
#	paket.lock
#	src/SqlClient.Samples/WebApi.Controllers/App.config
#	src/SqlClient.Samples/WebApi.Controllers/paket.references
#	src/SqlClient.Samples/WebApi/paket.references
#	src/SqlClient.Samples/WebApi/web.config
#	src/SqlClient.Samples/WpfDataBinding/App.config
#	src/SqlClient.Samples/WpfDataBinding/paket.references
#	src/SqlClient.Tests/Lib/App.config
#	src/SqlClient.Tests/Lib/Lib.fsproj
#	src/SqlClient.Tests/SqlClient.Tests.NET40/SqlClient.Tests.NET40.fsproj
#	src/SqlClient.Tests/app.config
#	src/SqlClient.Tests/paket.references
#	src/SqlClient/AssemblyInfo.fs
#	src/SqlClient/Configuration.fs
#	src/SqlClient/paket.references
@smoothdeveloper
Copy link
Collaborator

related: dotnet/fsharp#5115

@cmeeren
Copy link
Contributor

cmeeren commented Aug 27, 2018

This has been silent since the middle of May. Is it realistic to hope for .NET Core support, or should I look elsewhere for a .NET Core SQL type provider (or simply stick to Dapper)?

@lessismore1
Copy link

This has been silent since the middle of May. Is it realistic to hope for .NET Core support?

@vasily-kirichenko
Copy link
Contributor Author

I personally don't have plans to finish it, sorry. Type providers on Core is a super fragile mess.

@smoothdeveloper
Copy link
Collaborator

@cmeeren, @lessismore1 (@mauriciomagni), there will be realistic hope once someone who is more familiar with TP SDK and the new dotnet core tooling can give it a serious look.

I'm myself just starting to try the new tooling, but I'm not yet concerned with using the TP on dotnet core, nor am I at ease with TP SDK stuff.

Alas, MSSQL is not the kind of stuff I deal with much in my freetime, akin to active usage of C# in that regard 😃.

If someone is willing to give it another shot, I'll be eager to help however I can, and if I eventually need the provider for my work, I'll commit more efforts, but it is not happening yet.

Maybe MS can actually pour in some resources, this library is such a great illustration of type providers, targetted toward their covetted MSSQL cash cow, may be worth to ping @cartermp & @dsyme to see if they would be able to give it a nudge.

@dsyme
Copy link
Contributor

dsyme commented Oct 3, 2018

TPs on. Net core are in good shape now, there are basically no known remaining bugs in the TPSDK and packaging/publishing should be straight-forward if you sart with the template in the TPSDK.

If there are different non-netstandard dependencies that's another issue, it makes things harder.

It would be great to get this over the line

@samhanes
Copy link
Contributor

I've opened #314 with my attempt at this, I have some questions I'll post there.

@panesofglass
Copy link
Contributor

Suggest closing this in favor of #314

@vasily-kirichenko
Copy link
Contributor Author

Implemented in #314

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants