我有一个可怕的"无法加载文件或程序集",这次我没有办法修复它,希望你更聪明。
我的(简化的(解决方案是:
- 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)'
我尝试了几件事,但到目前为止都没有成功:
将我能找到的最接近System.Text.Json的5.0.0.2版本(5.0.0,5.0.1(添加到Client.dll,问题仍然存在。
将我能找到的System.Text.Json(6.0.1(的最新版本添加到Client.dll的5.0.0.2,问题仍然存在。
将包重定向添加到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>
无骰子
- 尝试将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