为什么在创建 SqlClient 类型时会出现缺少方法异常运行时?
Why do I get a missing method exception runtime when creating a SqlClient type?
我有以下代码:
open FSharp.Data
[<Literal>]
let connectionString = @"Data Source=(local)\SQLExpress;Integrated Security=SSPI;Database=SfagStage"
type InsertEnhet = SqlCommandProvider<"Sql\InsertEnhet.sql", connectionString>
let insertEnhet (enhet:Enhet) =
let cmd = new InsertEnhet() // <<--- This generates an error runtime
cmd.Execute(enhet.Navn, enhet.Enhetsnummer, enhet.LEIKode, enhet.Kommune, DateTime.Now)
我认为我创建命令的行是导致缺少方法的原因。我认为重要的异常部分是:
System.MissingMethodException: Method not found: 'Void FSharp.Data.ISqlCommand Implementation..ctor(FSharp.Data.Connection, Int32, System.String, Boolean, System.Data.SqlClient.SqlParameter[], FSharp.Data.ResultType, FSharp.Data.ResultRank, Microsoft.FSharp.Core.FSharpFunc`2, System.String)'.
当 FSharp.Core.dll
没有正确的 bindingRedirect
时,您可能会遇到这种异常。查看 this article by Mark Seemann。原则上,我认为在您的应用程序中添加 app.config
和 bindingRedirect
应该可以解决问题。
在使用新版本 FSharp.Core 的应用程序中使用针对旧版本 FSharp.Core 编译的库时,通常会发生这种情况。 .NET 运行时加载 FSharp.Core 的新版本,但它不知道旧版本的类型(如 FSharpFunc
)应该映射到新版本中的相应类型 - 所以你得到 MethodMissing,因为 .NET 认为 FSharpFunc
与加载的类型不同。 (尽管类型提供者的事情变得有点复杂。)
我有以下代码:
open FSharp.Data
[<Literal>]
let connectionString = @"Data Source=(local)\SQLExpress;Integrated Security=SSPI;Database=SfagStage"
type InsertEnhet = SqlCommandProvider<"Sql\InsertEnhet.sql", connectionString>
let insertEnhet (enhet:Enhet) =
let cmd = new InsertEnhet() // <<--- This generates an error runtime
cmd.Execute(enhet.Navn, enhet.Enhetsnummer, enhet.LEIKode, enhet.Kommune, DateTime.Now)
我认为我创建命令的行是导致缺少方法的原因。我认为重要的异常部分是:
System.MissingMethodException: Method not found: 'Void FSharp.Data.ISqlCommand Implementation..ctor(FSharp.Data.Connection, Int32, System.String, Boolean, System.Data.SqlClient.SqlParameter[], FSharp.Data.ResultType, FSharp.Data.ResultRank, Microsoft.FSharp.Core.FSharpFunc`2, System.String)'.
当 FSharp.Core.dll
没有正确的 bindingRedirect
时,您可能会遇到这种异常。查看 this article by Mark Seemann。原则上,我认为在您的应用程序中添加 app.config
和 bindingRedirect
应该可以解决问题。
在使用新版本 FSharp.Core 的应用程序中使用针对旧版本 FSharp.Core 编译的库时,通常会发生这种情况。 .NET 运行时加载 FSharp.Core 的新版本,但它不知道旧版本的类型(如 FSharpFunc
)应该映射到新版本中的相应类型 - 所以你得到 MethodMissing,因为 .NET 认为 FSharpFunc
与加载的类型不同。 (尽管类型提供者的事情变得有点复杂。)