55 votes

Les redirections de liaison dans app.config pour les bibliothèques de classes font-elles quelque chose?

Le VS des solutions je travaille souvent avec des consister en un seul exécutable du projet (application console, web app) et de nombreux projets de bibliothèque de classe qui sont toutes référencées par l'exécutable.

Lorsque vous travaillez avec NuGet et l'installation des packages, il y a souvent un app.config le fichier créé pour chaque projet, contenant généralement rien d'autre qu'une liste de liaison des redirections de consolider les versions de assemblys référencés. Parfois, il y a une bibliothèque tierce contenu spécifique (comme Entity Framework section de configuration), mais laissons cela de côté pour l'instant.

Quand j'ai créer la solution et utiliser les binaires de l'exécutable principal de projet, je vois tous les le projet de bibliothèque de classes assemblées à la sortie de la construction avec les correspondants *.config fichiers ( app.config fichier est renommé AssemblyName.config lors de la construction).

Lors du lancement de l'exécutable principal, faire les fichiers de configuration de la bibliothèque de classe assemblées ont aucun effet? Ou est-ce juste l' app.config le fichier de l'exécutable qui a un effet dans ce cas? Que faire si il y a quelques contraignant redirige mis en place sur certains des projets de bibliothèque de classe, et certains de liaison différent redirige mis en place sur l'exécutable principal de projet — Comment sont-elles combinées, qui ont la priorité?

J'ai essayé à la recherche de cette ligne, et à partir de ce que j'ai lu, il me semble que l' app.config fichiers pour les non-exécutable assemblées sont inutiles (en ce qui concerne la liaison des redirections). Quelqu'un peut-il confirmer ou d'élaborer un peu plus sur le sujet?

Si c'est de cette façon, est-il réellement souhaitable d'avoir ces app.config fichiers créés par NuGet dans les bibliothèques de classe s'ils contiennent juste la liaison des redirections? Il me semble que NuGet ne devrait pas créer de celles liant les redirections pour les projets de bibliothèque de classe, car il ne fera qu'augmenter la confusion sur ce que les paramètres soient effectivement appliquées.


J'ai trouvé ces Débordement de Pile questions sur le sujet, mais leurs réponses acceptées sont en fait contradictoires, même quand ils sont marqués comme doublons les uns des autres.

La accepté de répondre à la première question mentionne que l'application.les fichiers de configuration sont effectivement utilisés lors de la compilation, ce qui signifie qu'ils pourraient avoir un effet. Des Sources comme le MSDN et MSBuild code source sont qui y est citée comme une preuve qu'il est utilisé lors de la compilation. Malheureusement, je ne suis pas suffisamment compétent dans MSBuild pour comprendre comment elle est utilisée, et si c'est vraiment un argument valable.

Quelqu'un peut-il décrire un scénario d'exemple pour démontrer qu'une application.config avec la liaison des redirections pour une bibliothèque de classe peut faire quelque chose?

5voto

Karun Points 133

J'ai plusieurs applications similaires de configuration de l'application Web de référencement de multiples projets de bibliothèque ayant chacun leurs propres packages nuget, etc., Basé sur mon expérience personnelle de l'assemblée des liaisons dans la bibliothèque de projets ne sont pas considérés lors de l'exécution.

Les liaisons spécifiées web ou de l'application de config à la racine de l'application (web/console), c'est que seules les questions. Tous mes projets de la bibliothèque sont le programme d'installation avec "Copier dans le Répertoire de Sortie" paramètre "Ne pas copier" pour l'application.fichier de config que mon dossier de sortie n'est pas encombré avec des dll et leurs fichiers de configuration.

Voici le lien qui explique comment l'assemblée est chargé et où est-il en cours de recherche, et de la séquence d'elle. Pas le cas dans l'article ils parlent d'un projet individuel des fichiers de configuration.

Espérons que cela aide.

3voto

Roy Sanchez Points 715

Selon cet ancien article msdn:

Un fichier de configuration d'application est un fichier XML utilisé pour le contrôle de l'assemblée de liaison. Il peut rediriger une demande d'utiliser une version d'un side-by-side de l'assemblée à une autre version de la même assemblée. Ceci est appelé par la configuration de l'application. Un fichier de configuration d'application ne s'applique qu'à un manifeste d'application et dépendante des assemblées. Composants isolés, compilé avec un intégré à l' [ISOLATIONAWARE_MANIFEST_RESOURCE_ID] manifeste besoin d'un fichier de configuration d'application. Manifeste géré avec CreateActCtx besoin d'un fichier de configuration d'application.

Si seulement dll à la ISOLATIONAWARE_MANIFEST_RESOURCE_ID ensemble en fait utiliser une application indépendante de la config, sinon c'est reporté pour le processus principal fichier de configuration.

Pour plus d'infos sur ce ISOLATIONAWARE est que vous pouvez lire cet autre article MSDN qui va plus en profondeur.

ISOLATIONAWARE_MANIFEST_RESOURCE_ID est utilisé principalement pour les Dll. Il doit être utilisé si la dll veut privés dépendances autres que le processus par défaut. Par exemple, si une dll dépend comctl32.dll la version 6.0.0.0. Il devrait disposer d'une ressource de type RT_MANIFEST, ID ISOLATIONAWARE_MANIFEST_RESOURCE_ID dépendre de l'comctl32.dll version 6.0.0.0, de sorte que même si le processus exécutable veut comctl32.dll la version 5.1, la dll elle-même sera toujours utiliser la bonne version de comctl32.dll.

1voto

Jehof Points 14720

Il y a généralement un seul fichier de configuration et c'est le fichier de configuration de l'exécutable (.exe.config, web.config).

Toute assemblée des redirections doivent être placées dans le fichier de configuration de l'exécutable.

Les fichiers de Configuration de dll doivent être chargés manuellement à l'aide de la classe ConfigurationManager. Voir aussi cette question, l'Équivalent de l'app.config' pour une bibliothèque (DLL)

1voto

gitbox Points 23

La réponse est peut - être . Selon le type de projet, le fichier de bibliothèque est. Certains projets de bibliothèque s'exécutent dans des contextes où le fichier de configuration de la bibliothèque est respecté (par exemple, les rôles Web Azure), mais ce n'est pas la norme.

Voir ma réponse ici pour plus de détails.

0voto

Non, seulement l' app.config de l'exécutable aura de l'effet. Par exemple, si vous avez une console application de l'hébergement d'un service WCF, et dans votre service WCF vous utilisez, par exemple, ConfigurationManager.AppSettings, le AppSettings viendra à partir de la console de l'hôte app.config le fichier. Si vous lancez une autre application console (ConsoleClient) pour essayer de se connecter à la ConsoleHost, puis dans les parties où la ConsoleClient peut être dit d'être "l'exécution" (par exemple dans sa méthode main), il utilisera ConsoleClient de l' app.config, mais dès qu'il commence à utiliser le service WCF, le service WCF de déléguer à utiliser ConsoleHost de l' app.config. (À noter que ce dernier point est plus pertinent pour les détails derrière WCF cependant).

Étonnamment, msdn fourni cette grande source: https://social.msdn.microsoft.com/Forums/vstudio/en-US/e13194df-6308-4cbe-973c-f6a462f43eae/how-can-wcf-library-dll-access-application-settings?referrer=http://social.msdn.microsoft.com/Forums/vstudio/en-US/e13194df-6308-4cbe-973c-f6a462f43eae/how-can-wcf-library-dll-access-application-settings?referrer=http://social.msdn.microsoft.com/Forums/vstudio/en-US/e13194df-6308-4cbe-973c-f6a462f43eae/how-can-wcf-library-dll-access-application-settings?forum=wcf

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X