2016-07-17 27 views
3

Beim Versuch, einen Fehler zu finden, konnte die Datei nicht gefunden werden konsumiere meinen Typ Provider.F # Typ Abhängigkeitsauflösung des Providers - "Datei oder Assembly konnte nicht geladen werden ..."

Der Fehler tritt bei der Erstellung der konsumierenden Anwendung auf, wird jedoch im Visual Studio vor dem Build nicht als "roter Schnörkel" angezeigt.

Ich habe meine TP unten kopiert, aber das Problem tritt innerhalb der Database.listDbs Anruf und ich vermute stark das Problem ist nicht der Code unten, aber wie ich die Abhängigkeiten packen.

Ich rufe das Microsoft.Azure.DocumentDB-Paket auf, das wiederum von Newtonsoft.Json abhängt. Es ist das Newtonsoft.Json-Paket, das nicht gefunden werden kann. Ich benutze Paket, um Abhängigkeiten zu verwalten und Weiterleitungen zu haben.

Der vollständige Code (einschließlich aller Dateien paket) ist auf GitHub hier: https://github.com/stewart-r/AzureDocumentDbTypeProvider/tree/dependency-issue

Ich fand this question die sehr ähnlich scheint aber die Lösung keinen Unterschied machen.

Mein TP Code ist wie folgt:

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() 

Antwort

1

Dies ist ein Problem Bindung umleiten - benötigen Sie den BR innerhalb der Typ-Provider zu handhaben. Alternativ können Sie die Abhängigkeiten auf die minimale Version beschränken, die für Ihre direkte Abhängigkeit benötigt wird, z. DokumentDB.

0

Haben Sie versucht, um sicherzustellen, dass Ihre „TP Abhängigkeiten im selben Ordner befinden, die die TP selbst in residiert“?

Es klingt wie Sie das gleiche Problem haben wie in dieser Antwort beschrieben: https://stackoverflow.com/a/33889287/371698 (Zitat aus dieser Antwort)

+1

Ich denke, ich vermisse den Punkt mit diesem - viele Leute, die vorschlagen, dass ich sicherstellen muss, dass die DLLs in dem gleichen Ordner wie die DLL sind, aber ist das nicht das Standardverhalten? Ohne etwas Besonderes zu tun, wenn ich das TP baue, werden die TP-DLL und alle nugget-Paketdlls standardmäßig nach/bin/debug kopiert. Wenn ich das TP in diesem Ordner referenziere, erhalte ich immer noch den obigen Fehler. Verpasse ich den Punkt hier? –