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

3
在尝试使用类型提供程序时,我遇到了“无法加载文件或程序集......系统找不到指定的文件”的错误。在构建消费应用程序时出现错误,但在构建之前在Visual Studio中没有显示为“红色波浪线”。
我已经复制了我的TP,但问题发生在Database.listDbs调用内部,我强烈怀疑问题不在下面的代码中,而是在如何打包依赖项方面。
我调用Microsoft.Azure.DocumentDB包,它又依赖于Newtonsoft.Json。无法找到Newtonsoft.Json包。我使用Paket来管理依赖关系并进行重定向。
完整的代码(包括所有paket文件)在此处的github上:https://github.com/stewart-r/AzureDocumentDbTypeProvider/tree/dependency-issue 我找到了一个类似的问题这个问题,但解决方案没有任何改变。
我的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 ()
2个回答

2

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


0

1
我觉得我对此有些误解 - 很多人建议我需要确保依赖的 DLL 与 DLL 在同一个文件夹中,但这不是默认行为吗?如果我没有做任何特殊处理,如果我构建 TP,TP DLL 和所有 nuget 包 DLL 都会默认复制到 /bin/debug 中。如果我在该文件夹中引用 TP,我仍然会遇到上述错误。我错过了什么吗? - Stewart_R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接