.net - 从 .Net v4.0 程序集链接到 .Net v2.0 程序集似乎也链接(和别名)mscorlib v2.0。为什么?

标签 .net .net-2.0 .net-4.0 linker fusion

我有一个 .Net 程序集,它导入与 v2.0 运行时链接的程序集。我遇到的问题是,当我尝试对我的程序集运行一些测试时,Fusion 会尝试加载错误版本的依赖程序集。

查看程序集 list 后,我可以看到原因:FSharp.Core 的错误版本已连接。在我的构建文件中,我制作了 FSharp.Core, Version=4.0.0.0明确的,但 FSharpPowerPack似乎链接到 v2.0.0.0,并且有些似乎“赢得”了这场链接战。

这是 list :

// 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 ?

编辑:澄清一下,我的程序集是由 C# v4.0 编译器生成的。

最佳答案

您是否在控制将加载已编译程序集的应用程序?如果是这样,您可以在 app.config 文件中使用绑定(bind)重定向来强制所有 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>

如果您在使用自动化测试应用程序时遇到问题,您可以以类似的方式编辑其配置文件,假设它不会影响其操作。

关于.net - 从 .Net v4.0 程序集链接到 .Net v2.0 程序集似乎也链接(和别名)mscorlib v2.0。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3841911/

相关文章:

.net - IDataErrorInfo 与 IValidatableObject?

.net - 在自己的线程中运行连续进程的最佳方法是什么?

c# - WPF:绑定(bind) TreeView

c# - 编码 Urls C#

asp.net - 从 ASP.Net Web 服务 json 输出中删除 "d"对象

c# - 等待带有回调的多个方法完成

windows - 任务无法使用 SdkToolsPath 找到 "AL.exe"

.net - 我可以在不注释类的情况下自定义Json.NET序列化吗?

c# - 堆栈集合在 C# 2.0 中缺少 shift 和 unshift

c# - 加载插件 DLL 文件, "The invoked member is not supported in a dynamic assembly."