对于F#类型提供程序,如何为依赖程序集执行绑定重定向?

对于F#类型提供程序,如何为依赖程序集执行绑定重定向?,f#,type-providers,assembly-binding-redirect,F#,Type Providers,Assembly Binding Redirect,我正在开发一个F#Type提供程序,它依赖于fparsec0.9.2.0。它取决于FSharp.Core 4.0.0.0。当我尝试使用F#类型提供程序时,出现以下错误: {“无法加载文件或程序集'FSharp.Core,版本=4.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。系统找不到指定的文件。”:“FSharp.Core,版本=4.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a”} ===预

我正在开发一个F#Type提供程序,它依赖于fparsec0.9.2.0。它取决于FSharp.Core 4.0.0.0。当我尝试使用F#类型提供程序时,出现以下错误:

{“无法加载文件或程序集'FSharp.Core,版本=4.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。系统找不到指定的文件。”:“FSharp.Core,版本=4.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a”}

===预绑定状态信息===
日志:DisplayName=FSharp.Core,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a(完全指定)
日志:Appbase=file:///C:/Program 文件(x86)/Microsoft Visual Studio 11.0/Common7/IDE/
日志:初始PrivatePath=NULL
调用程序集:FParsec,版本=0.9.2.0,区域性=neutral,PublicKeyToken=e5c8267bb3bd1265

我尝试添加一个
Froto.Gen.dll.config
和一个
FParsec.dll.config
,这两个文件中都包含以下内容:



不走运。有什么想法吗?我的下一个行动计划是构建一个新的
FParsec.dll
,但这并不总是可行。

当args.Name需要4.0.0.0时,您是否尝试过重写AppDomain.CurrentDomain.AssemblyResolve并在FSharp.Core 4.3.0.0位置上执行显式Assembly.LoadFrom?

您实际上可以在类型提供程序中定义自己的程序集解析器

如果重写
ResolveAssembly
方法,则可以提供自己的程序集解析方案。默认实现相当简单:

default this.ResolveAssembly(args) = 
    let expectedName = (AssemblyName(args.Name)).Name + ".dll"
    let expectedLocationOpt = 
        probingFolders 
        |> Seq.map (fun f -> IO.Path.Combine(f, expectedName))
        |> Seq.tryFind IO.File.Exists
    match expectedLocationOpt with
    | Some f -> Assembly.LoadFrom f
    | None -> null
此外,还可以添加探测路径以影响为部件分辨率检查的位置:

[<TypeProvider>] 
type MyProvider(config: TypeProviderConfig) as this = 
    inherit TypeProviderForNamespaces()
    do this.RegisterProbingFolder "/Developer/MonoTouch/usr/lib/mono/2.1/"
    ...
[]
键入MyProvider(配置:TypeProviderConfig),如下所示:
继承TypeProviderForNamespaces()
执行此操作。RegisterProbingFolder“/Developer/MonoTouch/usr/lib/mono/2.1/”
...

Dll没有配置文件。尝试将重定向放入使用DLL的exe的配置(或machine.config)中。我正在使用另一个DLL中的类型提供程序。对于这种特殊情况,我刚刚创建了一个不同的FParsec构建。要求人们修改machine.config以使用您的类型提供程序可能不太实际。@CameronTaggart:您是否尝试过将bindingRedirect放入fsc.exe.config中(主要是出于好奇)?可能比machine.config更实用。该配置帮助我在一个C#NUnit项目中运行F#代码,谢谢。下面是Tao Lio关于如何执行此操作的示例: