我遇到了一个"无法加载文件或程序集...... ...系统找不到指定的文件"尝试使用我的类型提供程序时出错。
构建消费应用程序时出现错误,但不会显示为“红色波浪形”。在构建之前的visual studio中。
我已经在下面复制了我的TP,但问题出现在Database.listDbs
调用中,我强烈怀疑问题不在于下面的代码,而是我如何打包依赖项。
我调用了Microsoft.Azure.DocumentDB包,而后者依赖于Newtonsoft.Json。它是无法找到的Newtonsoft.Json包。我正在使用Paket来管理依赖项并重定向。
完整代码(包括所有paket文件)在github上:https://github.com/stewart-r/AzureDocumentDbTypeProvider/tree/dependency-issue
我发现this question似乎非常相似,但解决方案没有任何区别。
我的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 ()
答案 0 :(得分:1)
这是绑定重定向问题 - 您需要处理类型提供程序中的BR 。或者,您可以将依赖项限制为直接依赖项所需的最小版本,例如: DocumentDB。
答案 1 :(得分:0)
您是否尝试过确保您的&#34; TP依赖项位于TP本身所在的同一文件夹中?&#34;
听起来你有与本回答中描述的相同的问题: https://stackoverflow.com/a/33889287/371698(引自这个答案)