Mon application .Net peut-elle référencer deux versions différentes d’une bibliothèque d’infrastructure .net?

Supposons que j’ai deux projets, P4 et P3, ciblant respectivement .net 4.0 et 3.5.

Chaque projet a également une référence à System.Data. Dans le cas de P4, ce sera à System.Data v4.0.0.0 Dans le cas de P3, ce sera à System.Data v2.0.0.0

Le projet P4 fait également référence à P3.

Si P4 est chargé et exécuté, il utilise le .net 4.0 CLR. Au moment de l’exécution, les références à System.Data semblent résoudre en v4.0 à la fois dans P4 et P3. Je peux remplacer cela en utilisant des redirections d’assemblyBinding, mais P4 et P3 se résolvent ensuite en v2.0.

Est-il possible de configurer mon application de sorte que P4 utilise la version 4.0 et P3 utilise la version 2.0?

Jetez un coup d’œil à ceci: Côte-à-côte en cours de traitement Cela pourrait vous être utile.

Si vous avez le contrôle sur P3, oui. Accédez à la section références du projet, recherchez la référence System.Data et affichez sa fenêtre de propriétés (clic droit -> Propriétés).

Sélectionnez “True” pour la propriété “Version spécifique”. Recomstackr, redéployer, etc.

Notez que cela provoquera toutes sortes d’échecs d’exécution si .NET 2, 3 ou 3.5 n’est pas installé sur la machine lorsque l’assembly tente de se charger.

modifier

J’ai essayé cela, mais sans succès. P3 fonctionne toujours v4.0. Savez-vous si ce paramètre aurait un effet visible sur l’assemblage généré pour P3? Par exemple, le manifeste indique “.ver 2: 0: 0: 0”, que “Specific Version” soit défini sur true ou non.

Essayez d’append ceci à votre app.config: