2009-08-25 8 views
3

Comment VS 2008 détermine-t-il où rechercher les assemblages utilisés lors de la compilation des applications? Il doit y avoir un certain ordre utilisé. Y at-il quelque chose qui est utilisé dans les Outils \ Paramètres ou autre chose? Je suis à la recherche de l'ordre de résolution des assemblages lors du processus de compilation.Ordre de résolution de l'assemblage lors de la compilation

Répondre

2

Ce n'est vraiment pas VS 2008 qui détermine l'ordre, mais plutôt le compilateur. Je sais que vous n'avez pas spécifié de langue, mais je vais utiliser C# comme exemple (je suis sûr que beaucoup d'autres langues serviraient aussi de bons exemples). Si vous utilisiez C#, le compilateur traite d'abord csc.rsp (fichier de réponses situé à côté de csc.exe), puis traite les options de ligne de commande/r:. L'ordre des opérations détermine quel assembly est référencé. Par conséquent, les références d'assembly dans csc.rsp sont trouvées en premier, puis les assemblys de ligne de commande sont trouvés. C'était la compilation.

est ici la documentation pour le fichier de réponse C#:

http://msdn.microsoft.com/en-us/library/8a1fs1tb(VS.71).aspx

Voici les documents pour les options du compilateur C# de ligne de commande:

http://msdn.microsoft.com/en-us/library/2fdbz5xd(VS.71).aspx

Vous devez utiliser le Commande- compilateur de ligne si vous souhaitez utiliser un fichier de réponses personnalisé. Sinon, les références que vous ajoutez au dossier de références d'un projet déterminent ce qui apparaît sur la ligne de commande lorsque vous générez VS. Vous pouvez voir l'ordre dans lequel ces références apparaissent sur la ligne de commande en faisant une construction et en regardant la fenêtre de sortie, Ctrl + W + O.

La liaison d'assemblage à l'exécution n'est pas déterminée par VS, ni par le CLR. Un récapitulatif rapide indique que le CLR recherche si un assembly a été précédemment chargé en mémoire, vérifie le GAC et effectue une vérification en fonction de l'existence d'un appel explicite à Load dans le code, puis d'un paramètre de configuration pour codeBase, puis un ensemble de dossiers sous le dossier de l'application qui sont nommés pour les versions exe ou dll de l'assembly.Voici le lien MSDN:

http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx

Le fait que vous vous posez cette question, je me demande si votre motivation est de résoudre un ensemble de liaison question. Il existe un outil dans le .NET Framework SDK, appelé l'Assemblée Binding Log Viewer (Fuslogvw.exe) pour aider à résoudre ces types de problèmes:

http://msdn.microsoft.com/en-us/library/e74a18c4(VS.71).aspx

Deux des meilleures ressources sur le net pour le travail avec les fixations de montage et visionneuse de journaux de Fusion sont Fusion Atelier de Richard Grimes:

http://www.grimes.demon.co.uk/workshops/fusionWS.htm

quelques années, Suzanne Cook, qui était membre de l'équipe CLR, avait une excellente série de messages sur la liaison CLR:

http://blogs.msdn.com/suzcook/default.aspx

Hope this helps,

Joe

0

Jolie que cela dépend de la façon dont vous avez ajouté vos références.

Je pense il va comme ceci:

  1. Si une référence GAC, regardez dans le GAC
  2. Si une référence de projet, de la sortie de la construction du projet
  3. Si une référence de fichier, regards à l'emplacement du fichier

Si vous avez une référence directe à un type, votre projet ne se construira pas à moins que vous ne référenciez son assembly contenant, donc ce n'est pas comme vous pouvez simplement mettre les fichiers dans un répertoire commun et compiler. Vous devez référencer explicitement l'assembly.

La résolution de l'assemblage est plus importante lors de l'exécution. Au moment de la compilation, c'est assez déterministe.

Questions connexes