J'ai un .NET de l'assemblée qui (pour des raisons hors de mon contrôle) doit être dans le GAC. Cependant, la même assemblée est utilisé par un autre programme, qui a sa propre copie de l'ancienne version de la même assemblée. Il doit utiliser sa propre copie et non pas ce qui est dans le GAC. La version appropriée est probablement plus de tracas que ce qu'il vaut dans ce cas, pour des raisons que je ne vais pas entrer dans. Ma questions est: est-il de toute façon de le dire .NET: il suffit d'utiliser CETTE DLL, ici, dans ce répertoire - ignorer ce que vous trouverez dans le GAC a, ou n'importe où ailleurs.
Réponses
Trop de publicités?Assurez-vous que le GAC Assemblée et l'Assemblée locale ont différents numéros de version (pas une mauvaise idée de laisser votre numéro de build, au moins, l'auto-incrémentation par wild-brevets votre AssemblyVersion dans AssemblyInfo: [assembly: AssemblyVersion("1.0.0.*")] ). Ensuite, rediriger votre assemblée liaison à l'aide de votre application de config:
- http://msdn.microsoft.com/en-us/library/2fc472t2(SV.80).aspx
- http://msdn.microsoft.com/en-us/library/433ysdt1(SV.80).aspx.
Dans votre cas, vous n'aurez pas besoin de la "appliesTo" attribut de l'assemblyBinding config. Vous avez juste besoin de quelque chose comme:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="YourAssembly" publicKeyToken="AAAAAAAAAAAA" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.2.1.0" newVersion="5.0.8.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
Vous pouvez configurer DEVPATH pour forcer le chargement d’un assemblage, voir le texte du lien.
Cela ne répond pas à votre question car il était uniquement destiné à une utilisation en développement et même alors, il n’était pas vraiment recommandé car il ne reflétait pas l’utilisation en production. Cependant, je pensais que je le partagerais quand même car c'est bon à savoir.
Avez-vous essayé Assembly.LoadFromFile ()? Ceci est une opération manuelle, mais vous devez charger votre assemblage en mémoire avant de l’utiliser. .NET utilisera alors celui en mémoire au lieu de le rechercher.
Une autre solution serait que si l'assemblée locale n'était pas signée, vous pourriez la différencier de cette façon.
Rob