3

タイプ プロバイダーを使用しようとすると、「ファイルまたはアセンブリを読み込めませんでした... ... 指定されたファイルが見つかりませんでした」というエラーが発生します。

消費するアプリケーションのビルド時にエラーが表示されますが、ビルド前に Visual Studio で「赤い波線」として表示されません。

以下に TP をコピーしましたが、問題はDatabase.listDbs呼び出し内で発生し、問題は以下のコードではなく、依存関係をパッケージ化する方法にあると強く疑われます。

次に、Newtonsoft.Json に依存する Microsoft.Azure.DocumentDB パッケージを呼び出します。見つからないのは Newtonsoft.Json パッケージです。私はパケットを使用して依存関係を管理し、リダイレクトをオンにしています。

完全なコード (すべてのパケット ファイルを含む) は、 https ://github.com/stewart-r/AzureDocumentDbTypeProvider/tree/dependency-issue の 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 ()
4

2 に答える 2

2

これはバインディング リダイレクトの問題です。型プロバイダーで BR を処理する必要があります。または、依存関係を直接の依存関係で必要な最小バージョン (DocumentDB など) に制限することもできます。

于 2016-07-18T08:16:20.597 に答える
0

「TP の依存関係が、TP 自体が存在するのと同じフォルダーにある」ことを確認してみましたか?

この回答で説明されているのと同じ問題があるようです: https://stackoverflow.com/a/33889287/371698 (この回答からの引用)

于 2016-07-18T04:07:41.943 に答える