VS2017下VSIX无法加载System.Numerics.Vectors程序集问题
解决Visual Studio 2017中VSIX扩展加载System.Numerics.Vectors失败的问题
问题现象
开发的VSIX扩展在Visual Studio 2017中运行失败,抛出异常:
System.IO.FileNotFoundException: Could not load file or assembly 'System.Numerics.Vectors, Version=4.1.4.0
已确认以下信息:
- 项目csproj中已添加该程序集的包引用:
<PackageReference Include="System.Numerics.Vectors"> <Version>4.5.0</Version> </PackageReference> - 扩展目录中确实存在
System.Numerics.Vectors, Version=4.1.4.0文件,路径为:C:\Users\IEUser\AppData\Local\Microsoft\VisualStudio\15.0_90a627f6\Extensions\j5lca0pj.xmg - 通过
fuslogvw查看绑定日志,发现CLR并未在扩展目录中查找该程序集,但其他正常加载的包会在此目录查找;该程序集是System.Memory的依赖项,并非VSIX直接引用,且devenv.exe.config中无相关绑定重定向配置。
解决步骤
通过以下操作解决了问题:
- 移除代码中的以下绑定重定向特性:
[assembly: Microsoft.VisualStudio.Shell.ProvideBindingRedirection(AssemblyName = "System.Memory", OldVersionLowerBound = "1.0.0.0", OldVersionUpperBound = "4.0.1.1", NewVersion = "4.0.1.2")] [assembly: Microsoft.VisualStudio.Shell.ProvideBindingRedirection(AssemblyName = "System.Runtime.CompilerServices.Unsafe", OldVersionLowerBound = "1.0.0.0", OldVersionUpperBound = "4.0.4.9", NewVersion = "5.0.0.0")] [assembly: Microsoft.VisualStudio.Shell.ProvideBindingRedirection(AssemblyName = "System.Numerics.Vectors", OldVersionLowerBound = "1.0.0.0", OldVersionUpperBound = "4.1.3.0", NewVersion = "4.1.4.0")] - 将
System.Runtime.CompilerServices.Unsafe包版本从5.x降级到4.5版本。
排查发现
移除System.Numerics.Vectors的绑定重定向后,报错变为无法找到System.Memory,由此可见自定义的绑定重定向会干扰CLR对程序集的查找逻辑。
内容的提问来源于stack exchange,提问作者Jim W
相关产品推荐
相关产品推荐

