I need to take a built version of an C# application and change one of the reference dll's. What is the best way to do this, I have specific version turned off on the reference dll but as soon as I test replacing the dll with a newer version, I get the "Could not load file or assembly XXXXX, Version=XXXXX. Is there a way to stop the loader from caring about the version of the dll so the dll will just attempt to load?
+7
A:
Yes, you can do this - see the MSDN article Redirecting Assembly Versions.
You should read the whole document, but it essentially involves either the assembly's publisher creating a 'publisher policy file' or the consumer adding a bindingRedirect
to an app.config
file, like this (copied directly from the article):
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<bindingRedirect oldVersion="1.0.0.0"
newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
A few notes:
If you haven't explicitly specified your culture (as many don't), it will be "neutral" rather than "en-us".
If you don't already know it, you can get the assembly's public key token using the strong name utility, like this:
sn -t [AssemblyPath]
Jeff Sternal
2009-09-22 17:55:06
That would require a recompile, wouldn't it?
Michael Todd
2009-09-22 17:56:29
Or, os the configuration file checked only at runtime?
Michael Todd
2009-09-22 17:59:23
Those xml files are checked at runtime. See http://msdn.microsoft.com/en-us/library/yx7xezcf(VS.71).aspx
Brian
2009-09-22 18:01:18
@Michael - indeed, what Brian said. :)
Jeff Sternal
2009-09-22 18:18:02