2010-02-11 11 views
2

Je référence un assemblage signé. En exécution, je peux travailler avec n'importe quelle version de cet assemblage, pas seulement celle que j'ai compilée.Chargement d'un assemblage depuis n'importe quelle version

Comment y parvenir?

+0

Pourriez-vous changer le titre de la question de manière appropriée, de telle sorte qu'il soit plus facile pour les gens de faire une recherche? – shahkalpesh

Répondre

2

Non, ça ne va pas marcher. Le CLR vérifiera le numéro de version de l'assemblage, s'attendant à obtenir celui que votre programme principal a été compilé. Vous devrez utiliser le <bindingRedirect> element dans le fichier app.config pour le convaincre qu'une version différente est acceptable.

C'est une pente glissante. Considérez seulement de changer l'attribut [AssemblyVersion] si l'interface publique de l'assembly a changé et nécessite que les clients soient recompilés. Maintenant, l'exception que vous obtiendrez est celle qui identifie un vrai problème. C'est une autre pente glissante, mais vous aurez beaucoup plus de contrôle.

A titre de comparaison, c'est la façon dont tous les ensembles de base dans le travail du framework .NET. Il y a eu beaucoup de révisions entre eux .NET 2.0 RTM et 3.5 SP1, y compris beaucoup de correctifs invisibles. Mais [AssemblyVersion] est toujours 2.0.0.0, Microsoft ne modifie que [AssemblyFileVersion].

1

Dans l'EDI, assurez-vous que "Version spécifique" est définie sur false par rapport à la référence ou ajoutez <SpecificVersion>False</SpecificVersion> à la référence dans csproj.

+0

@Marc: Comment l'environnement d'exécution détermine-t-il l'assemblage (parmi plusieurs versions) à charger? (Je suppose qu'une assemblée signée est placée dans GAC). – shahkalpesh

+0

Est-ce que cela fonctionne avec des assemblages signés? –

+0

@Marc: J'ai cherché sur la question que je vous ai posée ci-dessus et il semble que le moteur d'exécution choisira la dernière version de l'assemblage. Est-ce correct? – shahkalpesh