nic*_*las 3 .net dll f# reflector .net-4.0
我正在尝试使用Infer.Net(用于概率编程的F#库)并在VS11 Beta中运行示例导致错误:
无法加载文件或程序集'FSharp.Core,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.
如果我打开使用Reflector中的infer.net样本的dll,一个,probcomp.dll,说它无法自动找到"FSharp.Core,Version = 4.0.0.0",我需要手动选择位置.
这两件事是否相关?是否有可能使用"固定路径"引用编译probcomp.dll,现在它在我的机器上是不一样的?
PS:当然fsharp项目从头开始工作正常..
PS2:视觉工作室中参考的dll没有显示任何未找到它们的迹象.我可以在对象浏览器中打开它们.
UPDATE
在程序开始时错误发生,没有时间看到任何东西.然而,它发生在程序内:如果未调用以下行
let coinsD = inferExpr <@ coins @>
Run Code Online (Sandbox Code Playgroud)
然后错误不会发生.有了它,在另一个例子中引发了以下错误.不出所料,它来自dll,它的行为在反射器中很奇怪.
无法加载文件或程序集'FSharp.Core,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
在对象浏览器中,所述函数的签名非常奇怪:
public static IDistribution<b>inferExpr<b>(**unknown-type e**)
Run Code Online (Sandbox Code Playgroud)
是的,在我告诉他在打开dll 后在哪里找到Fsharp 4.0.0时,在反射器中,它有签名
public static IDistribution<b> inferExpr<b>(FSharpExpr<b> e);
Run Code Online (Sandbox Code Playgroud)
这个dll必须有某种奇怪的硬链接依赖关系,而且反射器比VS更聪明(或者不是......)来解决它.
为了从坏事中获益,如果你对这个dll中可能发生的事情有所了解,这可能是一个学习的机会.
一个app.config文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a"
culture="neutral"/>
<bindingRedirect oldVersion="4.0.0.0" newVersion="4.3.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
会解决问题.
| 归档时间: |
|
| 查看次数: |
3260 次 |
| 最近记录: |