Nuget软件包在ref / lib文件夹中包含不同的dll版本

时间:2018-10-02 10:47:19

标签: .net dll nuget .net-standard

我在System.ComponentModel.Annotations v4.5.0中有问题。

更新到此版本后,我的应用由于FileLoadException (Could not load file or assembly 'System.ComponentModel.Annotations, Version=4.2.0.0 Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)而崩溃。

此程序包用于目标为netstandard2.0的库项​​目中,然后由目标为net461的Webapi项目使用。

经检查,结果表明该nuget软件包在ref目标的libnetstandard2.0文件夹中包含不匹配的版本(对于net461目标的版本匹配)。

ref/netstandard2.0中用于编译的版本是4.2.0.0,而运行时使用的lib/netstandard2.0中的版本是4.2.1.0,因此出现错误。您可以从NuGet Gallery下载该软件包,并通过检查其内容来发现不匹配。

在同一个nuget软件包中,此版本msimatch是否可以预期,在这种情况下,我将使用绑定重定向,或者这是软件包本身的问题吗?

1 个答案:

答案 0 :(得分:1)

您需要在app.config中使用binding redirection来解析版本,

这里是一个例子:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
        <assemblyIdentity name="System.ComponentModel.Annotations" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
    </dependentAssembly>
</assemblyBinding>