RabbitMQ Connection Factory could not find System.Threading.Tasks.Extensions in my app bin

2

I have the following code

var factory = new ConnectionFactory()
{
    HostName = "path.to.host.net",
    UserName = "guest",
    Password = "guest",
    VirtualHost = "myhost"
};
var connection = factory.CreateConnection();

The last line of the above complains with the following error

FileLoadException: Could not load file or assembly 'System.Threading.Tasks.Extensions, Version=4.2.0.0, 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)

I checked the Fusion Log and it says the following

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\Program Files (x86)\IIS Express\iisexpress.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: DisplayName = System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 (Fully-specified)
LOG: Appbase = file:///C:/Path/To/Web/
LOG: Initial PrivatePath = C:\Path\To\\Web\bin
Calling assembly : System.Threading.Channels, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Path\To\Web\web.config
LOG: Using host configuration file: C:\Users\fahadash\Documents\IISExpress\config\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
LOG: Attempting download of new URL file:///C:/Users/fahadash/AppData/Local/Temp/Temporary ASP.NET Files/vs/699f3d52/97d4d2c/System.Threading.Tasks.Extensions.DLL.
LOG: Attempting download of new URL file:///C:/Users/fahadash/AppData/Local/Temp/Temporary ASP.NET Files/vs/699f3d52/97d4d2c/System.Threading.Tasks.Extensions/System.Threading.Tasks.Extensions.DLL.
LOG: Attempting download of new URL file:///C:/Path/To/Web/bin/System.Threading.Tasks.Extensions.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Revision Number
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

I opened the DLL's found in the bin in IL Disassembler and checked the manifests and found the following

System.Threading.Tasks.Extensions.DLL is 4.2.0.1 The above is dependent on System.Runtime.CompilerServices.Unsafe 4.0.4.1 which is there in the bin already.

So 4.2.0.0 is a mismatch with a 4.2.0.1 so I decided to add the following Binding Redirect

<dependentAssembly>
  <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
</dependentAssembly>

I still get the same runtime error complainign that it did not find Extensions 4.2.0.0. What am I missing?

c#
rabbitmq
assembly-binding-redirect
.net-framework-4.8
assemblybinding
asked on Stack Overflow Feb 5, 2021 by fahadash

1 Answer

2

Duplicate Binding Redirects are ignored by clr.

This is embarrassing.

I found out that I had two binding redirects for the same System.Threading.Tasks.Extensions assembly, and system was using the first one found and ignoring the second one. And there was no complain about duplicates.

Hoping this answer will save someone else's time in future.

answered on Stack Overflow Feb 5, 2021 by fahadash

User contributions licensed under CC BY-SA 3.0