Quelle est exactement la différence entre le HintPath
dans un fichier .csproj et le ReferencePath
dans un .csproj.user
fichier? Nous essayons de nous engager dans une convention où les DLL de dépendance se trouvent dans un repo svn "releases" et tous les projets pointent vers une version particulière. Étant donné que différents développeurs ont des structures de dossiers différentes, les références relatives ne fonctionneront pas, nous avons donc proposé un schéma pour utiliser une variable d'environnement pointant vers le dossier des versions du développeur particulier pour créer une référence absolue. Ainsi, après l'ajout d'une référence, nous éditons manuellement le fichier projet pour changer la référence en un chemin absolu à l'aide de la variable d'environnement.
J'ai remarqué que cela peut être fait à la fois avec le HintPath
et le ReferencePath
, mais la seule différence que j'ai pu trouver entre eux est que cela HintPath
est résolu au moment de la construction et ReferencePath
lorsque le projet est chargé dans l'EDI. Je ne sais pas vraiment quelles en sont les ramifications. J'ai remarqué que VS réécrit parfois le .csproj.user
et je dois le réécrire ReferencePath
, mais je ne suis pas sûr de ce qui le déclenche.
J'ai entendu dire qu'il est préférable de ne pas archiver le .csproj.user
fichier car il est spécifique à l'utilisateur, donc j'aimerais viser cela, mais j'ai également entendu dire que la HintPath
DLL -spécifiée n'est pas "garantie" d'être chargée si la même DLL se trouve par exemple dans le répertoire de sortie du projet. Des pensées à ce sujet?
la source
Regardez dans le fichier Microsoft.Common.targets
La réponse à la question se trouve dans le fichier
Microsoft.Common.targets
de la version de votre framework cible.Pour .Net Framework version 4.0 (et 4.5!), L'élément AssemblySearchPaths est défini comme ceci:
Pour .Net Framework 3.5, la définition est la même, mais le commentaire est erroné. La définition 2.0 est légèrement différente, elle utilise $ (OutputPath) au lieu de $ (OutDir).
Sur ma machine, j'ai les versions suivantes du fichier Microsoft.Common.targets:
C'est avec Visual Studio 2008, 2010 et 2013 installé sur Windows 7.
Le fait que le répertoire de sortie soit recherché peut être un peu frustrant (comme le souligne l'affiche d'origine) car il peut masquer un HintPath incorrect. La solution se construit correctement sur votre machine locale, mais se rompt lorsque vous construisez dans une structure de dossier propre (par exemple sur la machine de construction).
la source
Ma propre expérience a été qu'il est préférable de s'en tenir à l'un des deux types de références d'assemblage:
J'ai trouvé (tout comme vous l'avez décrit) d'autres méthodes qui sont soit trop facilement cassées, soit ont des exigences de maintenance ennuyeuses.
Tout assembly que je ne veux pas GAC doit vivre dans le répertoire d'exécution. Tout assembly qui n'est pas ou ne peut pas être dans le répertoire d'exécution I GAC (géré par des événements de construction automatiques).
Cela ne m'a posé aucun problème jusqu'à présent. Bien que je sois sûr qu'il y a une situation où cela ne fonctionnera pas, la réponse habituelle à tout problème est "oh, juste GAC!". 8 J
J'espère que cela pourra aider!
la source
Bien que ce soit un vieux document, mais cela m'a aidé à résoudre le problème de l'ignorance de «HintPath» sur une autre machine. C'était parce que la DLL référencée devait également être dans le contrôle de code source:
https://msdn.microsoft.com/en-us/library/ee817675.aspx#tdlg_ch4_includeoutersystemassemblieswithprojects
Extrait:
la source