如何解决Framework 4.8使用的NetStandard 2.0库中的包引用问题



我有一个可怕的"无法加载文件或程序集",这次我没有办法修复它,希望你更聪明。

我的(简化的(解决方案是:

  • Winforms.exe,Framework 4.8。此参考:
  • Client.dll,.Net Standard 2.0,使用
  • IdentityModel.OidcClient 5.0.0使用
  • System.Text.Json

由于Client.dll不是.Net Core 5.0,我添加了System.Text.Json作为NuGet包。这导致在OidcClient上调用RefreshTokenAsync时出现以下异常:

System.IO.FileLoadException: 'Could not load file or assembly 'System.Text.Json, Version=5.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)'

我尝试了几件事,但到目前为止都没有成功:

  1. 将我能找到的最接近System.Text.Json的5.0.0.2版本(5.0.0,5.0.1(添加到Client.dll,问题仍然存在。

  2. 将我能找到的System.Text.Json(6.0.1(的最新版本添加到Client.dll的5.0.0.2,问题仍然存在。

  3. 将包重定向添加到Winforms.exe(即使Generate Auto Redirects=true(:

    <dependentAssembly>
    <assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/>
    <bindingRedirect oldVersion="5.0.0.2" newVersion="6.0.1"/>
    </dependentAssembly>
    

无骰子

  1. 尝试将NuGet(所有不同版本(添加到WinForms.exe,无论是否重定向。问题仍然存在

我不知道该怎么解决了,有人接受吗?提前非常感谢。

我对EF Core和EF6做了类似的操作。在cproj内部添加一个条件:

<ItemGroup Condition=" '$(TargetFramework)' == 'net48' ">
<PackageReference Include="System.Text.Json" Version="5.0.0"></PackageReference>
</ItemGroup>

然后使用预处理器指令加载程序集:

#if NET48
using System.Text.Json;
#endif

最新更新