Fernando Tubio
2009-05-24 21:30:01 UTC
I have a *third-party* .NET application that fails when executed in Windows
7 (so far I have only tried with the beta, although I expect it to be the
same with the RC). I have already determined the cause. The application uses
reflection to retrieve information for a method in one of the types in the
framework. In Windows 7, this type was changed to add an overload for this
particular method and as a result, the call to Type.GetMethod now fails with
"Ambiguous match found.". (Remember that this is not my application so I
can't change the fact that it calls the GetMethod overload that takes a
single string parameter with the method's name.)
I will ignore for the moment the fact that we appear to be back in DLL hell
considering that assemblies in Windows 7 maintain the same version number
even though they have breaking changes. To resolve the problem, I want to
configure the application to load the System.dll assembly from .NET 3.5 SP1
instead.
My first approach was to set up a DEVPATH to a private folder where I copied
the correct assembly from another machine and I was able to confirm that the
application is able to execute successfully using this version of
System.dll.
However, to use DEVPATH you must configure it at the machine.config level
and it has an impact on every .NET application in the system. Instead, I
want to configure just this application so that it loads its own private
System.dll. I tried with <assemblyBinding> and a <codeBase> pointing to a
private folder, but this seems to be ignored.
So the question is, how can I force the application to load System.dll from
a specific path?
Thanks,
Fernando
===================================
View archives and manage your subscription(s) at http://peach.ease.lsoft.com/archives
7 (so far I have only tried with the beta, although I expect it to be the
same with the RC). I have already determined the cause. The application uses
reflection to retrieve information for a method in one of the types in the
framework. In Windows 7, this type was changed to add an overload for this
particular method and as a result, the call to Type.GetMethod now fails with
"Ambiguous match found.". (Remember that this is not my application so I
can't change the fact that it calls the GetMethod overload that takes a
single string parameter with the method's name.)
I will ignore for the moment the fact that we appear to be back in DLL hell
considering that assemblies in Windows 7 maintain the same version number
even though they have breaking changes. To resolve the problem, I want to
configure the application to load the System.dll assembly from .NET 3.5 SP1
instead.
My first approach was to set up a DEVPATH to a private folder where I copied
the correct assembly from another machine and I was able to confirm that the
application is able to execute successfully using this version of
System.dll.
However, to use DEVPATH you must configure it at the machine.config level
and it has an impact on every .NET application in the system. Instead, I
want to configure just this application so that it loads its own private
System.dll. I tried with <assemblyBinding> and a <codeBase> pointing to a
private folder, but this seems to be ignored.
So the question is, how can I force the application to load System.dll from
a specific path?
Thanks,
Fernando
===================================
View archives and manage your subscription(s) at http://peach.ease.lsoft.com/archives