タイプ プロバイダーを使用しようとすると、「ファイルまたはアセンブリを読み込めませんでした... ... 指定されたファイルが見つかりませんでした」というエラーが発生します。
消費するアプリケーションのビルド時にエラーが表示されますが、ビルド前に 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 ()