VSIX无法从包含的软件包中找到引用的程序集,VS 2017。

3

我编写了一个在VS 2017中失败的VSIX

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

ildasm

我检查了 fuslogvw 并获得了以下结果

*** Assembly Binder Log Entry  (4/6/2023 @ 9:19:29 AM) ***

The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\devenv.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: DisplayName = System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 (Fully-specified)
LOG: Appbase = file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = devenv.exe
Calling assembly : System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\IEUser\AppData\Local\Microsoft\VisualStudio\15.0_90a627f6\devenv.exe.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/System.Numerics.Vectors/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PublicAssemblies/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PublicAssemblies/System.Numerics.Vectors/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PrivateAssemblies/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PrivateAssemblies/System.Numerics.Vectors/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Microsoft/TemplateProviders/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Microsoft/TemplateProviders/System.Numerics.Vectors/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Microsoft/TestWindow/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Microsoft/TestWindow/System.Numerics.Vectors/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Platform/Debugger/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Platform/Debugger/System.Numerics.Vectors/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Platform/DiagnosticsHub/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Platform/DiagnosticsHub/System.Numerics.Vectors/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PrivateAssemblies/DataCollectors/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PrivateAssemblies/DataCollectors/System.Numerics.Vectors/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PrivateAssemblies/DataCollectors/x86/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PrivateAssemblies/DataCollectors/x86/System.Numerics.Vectors/System.Numerics.Vectors.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/System.Numerics.Vectors/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PublicAssemblies/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PublicAssemblies/System.Numerics.Vectors/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PrivateAssemblies/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PrivateAssemblies/System.Numerics.Vectors/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Microsoft/TemplateProviders/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Microsoft/TemplateProviders/System.Numerics.Vectors/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Microsoft/TestWindow/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Microsoft/TestWindow/System.Numerics.Vectors/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Platform/Debugger/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Platform/Debugger/System.Numerics.Vectors/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Platform/DiagnosticsHub/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Platform/DiagnosticsHub/System.Numerics.Vectors/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PrivateAssemblies/DataCollectors/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PrivateAssemblies/DataCollectors/System.Numerics.Vectors/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PrivateAssemblies/DataCollectors/x86/System.Numerics.Vectors.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/PrivateAssemblies/DataCollectors/x86/System.Numerics.Vectors/System.Numerics.Vectors.EXE.
LOG: All probing URLs attempted and failed.

虽然我直接包含了System.Numerics.Vectors包,但它并没有被VSIX直接使用,而是System.Memory的一个引用,不确定这是否有影响。

我还注意到对于其他找到的包引用,融合日志的最后一行是在扩展文件夹中查找,那么为什么它不在那里查找Numerics.Vectors呢?

例如:

LOG: Attempting download of new URL file:///c:/users/ieuser/appdata/local/microsoft/visualstudio/15.0_90a627f6/extensions/j5lca0pj.xmg/GA4-NET.DLL.
LOG: Assembly download was successful. Attempting setup of file: c:\users\ieuser\appdata\local\microsoft\visualstudio\15.0_90a627f6\extensions\j5lca0pj.xmg\GA4-NET.dll

devenv.exe.config 中没有提到 System.Numerics.Vectors,因此没有重定向。

更新:我发现通过删除这些绑定重定向并将包引用从5降级到4.5的方式,问题已经消失了。

 [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.Numerics.Vectors时,它就不再抱怨找不到它了,而是抱怨找不到System.Memory。还有一个引用System.Memory -> System.Numerics.Vectors。我还没有时间仔细思考,但很明显重定向会影响它如何查找程序集。我已经度过了这个难关。
2个回答

0
错误提示无法找到程序集 System.Numerics.Vectors 的版本 4.1.4.0,而您已经安装/引用了版本 4.5.4.0。
您需要在 web.config 中添加程序集绑定重定向。
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-4.5.4.0" newVersion="4.5.4.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

“4.5.4”是软件包版本,其中包含程序集版本“4.1.4.0”,所以我的做法是正确的,并且我已经验证“4.1.4.0”与我的VSIX文件在同一个文件夹中。 - Jim W says reinstate Monica

0

我相信我已经弄清楚了。

(至少在VSIX的上下文中,也许是一般情况下)假设您有对程序集A v1的引用,该程序集引用了B v1。

MyProj -> A v1 -> B v1

但无论出于何种原因,您需要将A重定向到v2,并且

A v2 -> B v2

所以你在项目中放置了一个绑定重定向A v1 to A v2。即使B v2与您的项目一起分发,似乎程序集绑定器会失去上下文,并且不会在与MyProj相同的目录中查找B v2 - 而没有重定向时它会在MyProj目录中查找。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接