0

我正在尝试向我正在开发的类型提供程序添加一项功能,以允许用户指定类型。由于类型提供程序不能提供泛型方法,因此似乎唯一的方法是引用具有该类型的程序集。

我尝试使用 Owin 库中的类型对此进行概念验证,但是在尝试使用提供的类型时遇到了问题:

在此处输入图像描述

它说它找不到该文件,即使它显然存在,否则CSharpCodeProvider我正在使用的会给出错误(它之前已经为不正确的文件路径做过)。我试过在一个单独的非类型提供项目中重现这个问题,但它在那里工作。

这个项目的代码在这里(输入类型分支): https ://github.com/isaksky/routeprovider/tree/input-type

您可以通过打开主 RouteProvider 解决方案并调试 DebugOwin 示例来查看问题(它将为使用 RouteProvider 的示例解决方案打开一个新的 Visual Studio 实例)。

4

2 回答 2

0

Dmitry 的解决方案是一种方法。另一种方法是简单地确保您的 TP 依赖项位于 TP 本身所在的同一文件夹中。我们将这种机制用于Azure Storage TP

于 2015-11-24T09:00:34.520 回答
0

有人链接了这个答案,其中有对该问题的解释和解决方案:

在 F# 中调用另一个 dll 的类型提供程序

我最终不得不使用 typeprovider config ( cfg)'s ReferencedAssemblies,如下所示:

      _assemblyResolver <- ResolveEventHandler(fun _ args ->
        let expectedName = (AssemblyName(args.Name)).Name + ".dll"
        let asmPath = 
            cfg.ReferencedAssemblies
            |> Seq.tryFind (fun asmPath -> IO.Path.GetFileName(asmPath) = expectedName)
        match asmPath with
        | Some f -> Assembly.LoadFrom f
        | None -> null)
      System.AppDomain.CurrentDomain.add_AssemblyResolve(_assemblyResolver)
于 2015-11-25T07:02:31.073 回答