Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Assembly binding redirect does not work

I'm trying to set up an assembly binding redirect, using the following app.config:

<configuration>   <runtime>     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">       <dependentAssembly>         <assemblyIdentity name="Microsoft.AnalysisServices"                           PublicKeyToken="89845dcd8080cc91" />         <bindingRedirect oldVersion="10.0.0.0"                          newVersion="9.0.0.0" />       </dependentAssembly>     </assemblyBinding>   </runtime> </configuration> 

I'm running the program on a machine with version 9.0.242.0 in the GAC, with the specified public key token. The CLR doesn't seem to be even trying to redirect the binding to use that version though.

Here is what I get in fuslogvw.exe:

LOG: This bind starts in default load context. LOG: Using application configuration file: \Debug\AssemblyRedirectPOC.exe.Config LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config. LOG: Post-policy reference: Microsoft.AnalysisServices, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 LOG: GAC Lookup was unsuccessful. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices.DLL. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices/Microsoft.AnalysisServices.DLL. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices.EXE. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices/Microsoft.AnalysisServices.EXE. LOG: All probing URLs attempted and failed.

When I tried putting the 9.0.242.0 version dll in the probe path, I get this instead:

LOG: Assembly download was successful. Attempting setup of file: \Debug\Microsoft.AnalysisServices.dll LOG: Entering run-from-source setup phase. LOG: Assembly Name is: Microsoft.AnalysisServices, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 WRN: Comparing the assembly name resulted in the mismatch: Major Version ERR: The assembly reference did not match the assembly definition found. ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

Note that I also tried changing the redirect to use "9.0.242.0" instead of "9.0.0.0" in the app.config and that didn't work, although I don't think it should make any difference.

From what I understand the whole point of redirecting a binding is to use a version that does not match that which the program was built with. Am I completely missing something here? Is what I'm trying to do possible, and if so, any idea of why it's not working?

Cheers, Adam

like image 261
Adam Avatar asked Aug 16 '10 03:08

Adam


People also ask

How do I add assembly binding redirect?

Specify assembly binding in configuration files. You use the same XML format to specify binding redirects whether it's in the app configuration file, the machine configuration file, or the publisher policy file. To redirect one assembly version to another, use the <bindingRedirect> element.

How do I enable and disable automatic binding redirection?

Right-click the project in Solution Explorer and select Properties. On the Application page, uncheck the Auto-generate binding redirects option. If you don't see the option, you'll need to manually disable the feature in the project file.

How do I add-BindingRedirect?

Open the NuGet Package Manager Console, specify the appropriate Default Project and enter the command Add-BindingRedirect. As if by magic, an app. config is added to the project (if one doesn't exist already) and the appropriate information added. Sweet!


2 Answers

Any typo in configuration xml can be a cause. Loader just can't see your configuration. I also had a hour of headache until I realize that the error was in character "=" instead of "-" in schema name:

<assemblyBinding xmlns="urn:schemas=microsoft-com:asm.v1"> 

Just check carefully all attribute names and values. I guess "PublicKeyToken" should be "publicKeyToken"

This should work:

<configuration> <runtime>     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">         <dependentAssembly>             <assemblyIdentity name="Microsoft.AnalysisServices" publicKeyToken="89845dcd8080cc91" />             <bindingRedirect oldVersion="10.0.0.0" newVersion="9.0.0.0"/>         </dependentAssembly>     </assemblyBinding> </runtime> </configuration> 
like image 117
Shrike Avatar answered Sep 21 '22 12:09

Shrike


Make sure your <configuration> tag has no namespace attribute. Otherwise any <assemblyBinding> tag will be ignored.

Wrong:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 

Right:

<configuration> 

(from https://stackoverflow.com/a/12011221/150370)

like image 43
German Latorre Avatar answered Sep 21 '22 12:09

German Latorre