F# F“类型提供程序依赖项解析-”;无法加载文件或程序集…”;

F# F“类型提供程序依赖项解析-”;无法加载文件或程序集…”;,f#,type-providers,assembly-binding-redirect,paket,F#,Type Providers,Assembly Binding Redirect,Paket,尝试使用我的类型提供程序时,遇到“无法加载文件或程序集……系统找不到指定的文件”错误 该错误出现在生成消费应用程序时,但在生成之前,不会在visual studio中显示为“红色波形” 我已经在下面复制了我的TP,但是问题发生在数据库.listDbs调用中,我强烈怀疑问题不是下面的代码,而是我如何打包依赖项 我调用了Microsoft.Azure.DocumentDB包,该包又依赖于Newtonsoft.Json。找不到的是Newtonsoft.Json包。我正在使用Paket管理依赖项,并在上

尝试使用我的类型提供程序时,遇到“无法加载文件或程序集……系统找不到指定的文件”错误

该错误出现在生成消费应用程序时,但在生成之前,不会在visual studio中显示为“红色波形”

我已经在下面复制了我的TP,但是问题发生在
数据库.listDbs
调用中,我强烈怀疑问题不是下面的代码,而是我如何打包依赖项

我调用了Microsoft.Azure.DocumentDB包,该包又依赖于Newtonsoft.Json。找不到的是Newtonsoft.Json包。我正在使用Paket管理依赖项,并在上重定向

完整代码(包括所有paket文件)位于github的以下位置:

我发现这似乎非常相似,但解决方案没有任何区别

我的TP代码如下:

namespace ProviderImplementation

open ProviderImplementation.ProvidedTypes
open Microsoft.FSharp.Core.CompilerServices
open System.Reflection
open System
open Config
open Database

[<TypeProvider>]
type public DocumentDbTypeProvider(config: TypeProviderConfig) as this = 
    inherit TypeProviderForNamespaces()

    let thisAssembly = Assembly.GetExecutingAssembly()
    let docDbType = ProvidedTypeDefinition(thisAssembly,namespaceName,"DocumentDbTypeProvider", baseType = Some typeof<obj>)

    let initFn (typeName : string) (args : obj []) = 
        let acProvidedType = ProvidedTypeDefinition(thisAssembly, namespaceName, typeName, baseType = Some typeof<obj>)
        acProvidedType.AddMember(ProvidedConstructor(parameters = [], InvokeCode = (fun args -> <@@ null @@>)))

        let getDbProperties () = 
            Database.listDbs (args.[0] :?> string) (args.[1]:?> string)
            |> List.map(fun d -> new ProvidedProperty(d.Name, typeof<string>, IsStatic = true, GetterCode = (fun _ -> <@@ "Test db name" @@>)))
        acProvidedType.AddMembers(getDbProperties())
        acProvidedType

    let parameters = 
        [ ProvidedStaticParameter("accountEndPointUri", typeof<string>, String.Empty)
          ProvidedStaticParameter("accountKey", typeof<string>, String.Empty)]

    do
        docDbType.DefineStaticParameters(parameters,initFn)
        this.AddNamespace(namespaceName,[docDbType])

[<TypeProviderAssembly>]
do ()
命名空间提供程序实现
打开ProviderImplementation.ProvidedTypes
打开Microsoft.FSharp.Core.CompilerServices
开放系统。反射
开放系统
打开配置
开放数据库
[]
键入公共文档DbTypeProvider(配置:TypeProviderConfig),如下所示:
继承TypeProviderForNamespaces()
让thisAssembly=Assembly.getExecutionGassembly()
让docDbType=ProvidedTypeDefinition(此程序集,命名空间名称,“DocumentDbTypeProvider”,baseType=Some-typeof)
让initFn(typeName:string)(args:obj[])=
让acProvidedType=ProvidedTypeDefinition(thisAssembly,namespaceName,typeName,baseType=Some-typeof)
acProvidedType.AddMember(ProvidedConstructor(参数=[],调用代码=(有趣的参数->))
让getDbProperties()=
Database.listDbs(args.[0]:?>string)(args.[1]:?>string)
|>map(fun d->newprovidedproperty(d.Name,typeof,IsStatic=true,GetterCode=(fun\u->))
acProvidedType.AddMembers(getDbProperties())
acProvidedType
设参数=
[ProvidedStaticParameter(“accountEndPointUri”,typeof,String.Empty)
ProviderStaticParameter(“accountKey”,typeof,String.Empty)]
做
docDbType.DefineStaticParameters(参数,initFn)
this.AddNamespace(namespaceName,[docDbType])
[]
do()

您是否尝试确保“TP依赖项位于TP本身所在的同一文件夹中”

听起来您的问题与此答案中描述的相同:
(引用此答案)

这是一个绑定重定向问题-您需要在类型提供程序内处理BR。或者,您可以将依赖项限制为直接依赖项所需的最低版本,例如DocumentDB。

我认为我没有抓住要点,很多人建议我需要确保依赖项DLL与DLL位于同一文件夹中,但这不是默认行为吗?没有做任何特殊的事情,如果我构建TP,默认情况下TP dll和所有nuget包dll都会复制到/bin/debug。如果我引用该文件夹中的TP,仍然会出现上述错误。我是不是没抓住要点?