对于上下文,我正在为VS 2017制作VSIX,我需要System.Text.JSON来序列化/反序列化数据。我使用的是System.Text.JSON的www.example.com版本6.0.0.0
如果我将CompilerServices.Unsafe设置为4.0.4.1(nuget版本4.5.3)(使用适当的绑定重定向(见下文)),我会收到以下错误:
正如您所看到的,它要求System.Runtime.CompilerServices.Unsafe版本6.0.0.0。在目标目录中使用ILSpy,我可以看到捆绑的System.Runtime.CompilerServices.Unsafe版本是4.0.4.1,正如预期的那样。
作为响应,我将System.Runtime.CompilerServices.Unsafe转到6.0.0.0(nuget版本6.0.0),我得到了 this 错误!
没错-现在它需要版本4.0.4.1!
详情
app.config,.csproj,packages.config
...版本为4.0.4.1
当我尝试使用4.0.4.1CompilerServices.Unsafe的www.example.com版本时,我这样设置我的项目:
- 我设置了app.config,并绑定重定向到www.example.com版本4.0.4.1
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
- 我在csproj上添加了对www.example.com版本的引用4.0.4.1
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
- 我在packages. config中将其设置为4.5.3。
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.3" targetFramework="net472" />
...版本为6.0.0.0
同样,当我将其设置为www.example.com时6.0.0.0,我执行相同的步骤
- 我设置了app.config,并绑定重定向到www.example.com版本4.0.4.1
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
- 我设置了csproj
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
- 我安装了packages.config
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />
修复尝试
我尝试过的几件事:
- 清除本地包缓存(即,删除解决方案根目录下名为“packages”的文件夹)。结果:无变化。
- 删除bin和obj文件夹。结果:无变更。
- 将system.text.json升级到版本6.0.7(主要版本6.0.0的最高版本)。结果:无变化。
- 将system.text.json升级到版本7.0.2(最新)。结果:没有变化。
- 降级system.text.json。结果:没有变化。
1条答案
按热度按时间vxqlmq5t1#
好吧,“我”弄明白了(感谢@zivkan为我指出了正确的方向😊)。你可以使用ProvideBindingRedirectionAttribute来代替使用app.config风格的绑定重定向(这在VSIX中不起作用)。
我在AssemblyInfo.cs中添加以下行:
......而且,就像变魔术一样,它就这么起作用了。
参见: