我有一个 .Net 程序集,它导入与 v2.0 运行时链接的程序集。我遇到的问题是,当我尝试在程序集上运行一些测试时,Fusion 尝试加载依赖程序集的错误版本。
查看程序集清单后,我明白了原因:错误的版本FSharp.Core
已连接。在我的构建文件中,我做了FSharp.Core, Version=4.0.0.0
明确的,但是FSharpPowerPack
似乎链接到 v2.0.0.0,并且似乎“赢得”了这场链接战。
这是清单:
// Metadata version: v4.0.30319
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly extern System.Core
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly extern System
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly extern FSharp.PowerPack
{
.publickeytoken = (A1 90 89 B1 C7 4D 08 09 ) // .....M..
.ver 2:0:0:0
}
.assembly extern mscorlib as mscorlib_8
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
.assembly extern System.Core as System.Core_9
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 3:5:0:0
}
.assembly extern FSharp.Core
{
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 2:0:0:0
}
请注意,似乎通过包括FSharpPowerPack
包含其他 .Net 程序集(mscorlib、System、System.Core)的 v2.0 和 v3.5 并为其指定别名。为什么会发生这种情况?这是否与加载错误版本的问题有关FSharp.Core
?
Edit:澄清一下,我的程序集是由 C# v4.0 编译器生成的。
您是否控制将加载已编译程序集的应用程序?如果是这样,您可以在 app.config 文件中使用绑定重定向来强制所有 FSharp.Core 引用使用版本 4.0:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="4.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
如果您遇到自动化测试应用程序的问题,您可以以类似的方式编辑其配置文件,假设它不会影响其操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)