NuGet更新后的FileLoadException

时间:2014-10-20 22:24:42

标签: c# .net nuget unity-container

在更新了所有NuGet软件包之后,我的一个应用程序在启动时开始崩溃FileLoadException

Could not load file or assembly 'Microsoft.Practices.ServiceLocation, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.

这是在将ServiceLocation升级到版本1.3.0.0之后,我仔细检查了所有程序集以确保它们使用该版本。然后我运行Fuslogvw来诊断仍然引用旧版本的程序集:

LOG: DisplayName = Microsoft.Practices.ServiceLocation, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
(Fully-specified)
LOG: Appbase = file:///C:/Users/Charlie/AppData/Local/Programs/MyClient/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = MyClient.exe
Calling assembly : Microsoft.Practices.Prism.UnityExtensions, Version=5.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===

因此, UnityExtensions (另一个NuGet包)仍在引用旧版本。但这应该没问题,因为我已经在我的app.config文件中添加了bindingRedirect

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Practices.ServiceLocation" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.3.0.0" />
  </dependentAssembly>
</assemblyBinding>

但这似乎没什么区别。我的应用程序是针对.NET Framework 4.5.1的,我已经尝试使用AutoGenerateBindingRedirects开启和关闭。换句话说,我已经尝试了一切。这是怎么回事?

4 个答案:

答案 0 :(得分:1)

您需要解决此问题的所有方法是更新所有项目中的所有PRISM和Unity相关软件包。编辑不需要的绑定重定向。

详见codeplex

答案 1 :(得分:1)

您是否尝试过将绑定重定向更改为:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
        <assemblyIdentity name="Microsoft.Practices.ServiceLocation" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
    </dependentAssembly>
</assemblyBinding>

请注意,我只将oldVersion上限从 1.2.0.0 更改为 1.3.0.0 以捕获最高1.3的任何版本并重定向。

答案 2 :(得分:1)

确保配置文件中的引用实际上使用的是正确的版本。它们可能与NuGet安装的内容不同步。

答案 3 :(得分:1)

在你的例子中没有给出,但可能会帮助其他人像我一样在这里结束。

确保您没有错误的.NET版本集。

e.g。使用.NET 4 +时,appliesTo="v2.0.50727"将无效。

<assemblyBinding appliesTo="v2.0.50727" xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
        <assemblyIdentity name="Microsoft.Practices.ServiceLocation" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
    </dependentAssembly>
</assemblyBinding>