Dans notre projet web ASP.Net, nous semblons avoir des fichiers .refresh associés à certaines des Dll tierces que nous utilisons. Avez-vous une idée de ce qu'ils sont et de comment/quand ils sont créés?
Réponses
Trop de publicités?Ces fichiers donnent le chemin vers le DLL en question pour indiquer à Visual Studio où le trouver (vous pouvez vérifier cela en les ouvrant dans un éditeur de texte). Ils seront créés chaque fois que vous ajoutez une nouvelle référence au projet.
Ils apparaissent normalement lorsque vous utilisez un type de projet qui ne crée pas un fichier de projet standard de Visual Studio, car normalement les chemins vers les DLL référencées seraient inclus dans ce fichier.
De ici :
Dans un projet ASP.NET, l'ajout d'une référence basée sur un fichier ajoutera un fichier .refresh dans le dossier Bin. Lorsque le projet est sous contrôle de source, ce fichier est ensuite ajouté au contrôle de source. Les fichiers
*.dll.refresh
qui jonchent le répertoire bin. À chaque fois que vous ajoutez une référence externe, vous trouverez un fichier dll.refresh juste à côté. Ces fichiersdll.refresh
sont une exception à la règle, et ils devraient être ajoutés au contrôle de source. C'est le seul moyen pour votre projet web de savoir où se trouvent ses références.
Quelques informations sur les fichiers de rafraîchissement après des essais et erreurs. Ces expériences ont été réalisées avec Visual Studio 2012. Les références ont été ajoutées à un projet web C# asp.net.
Comme il a été discuté, ajouter une référence à une assembly via parcourir ajoute un fichier .refresh. Cependant, s'il y a des DLL dépendantes supplémentaires de la DLL ajoutée de manière explicite dans le répertoire à partir duquel vous ajoutez, les dépendances sont ajoutées implicitement également, mais sans fichiers .refresh ! Donc par exemple, si j'ajoute une référence à "MyAssembly.dll" je vais aussi obtenir "MyAssembly.dll.refresh". Mais s'il y a une assembly "MyDependentAssembly.dll" sur laquelle "MyAssembly.dll" dépend, je n'obtiendrai pas de "MyDependentAssembly.dll.refresh". Ainsi, une assembly est rafraîchie mais pas ses dépendances ! Vous devez ajouter les DLL une par une dans l'ordre inverse de la dépendance et alors les choses fonctionneront mieux.
Quelques autres choses auxquelles il faut faire attention. Ajouter "MyAssembly.dll" ajoutera aussi "MyAssembly.pdb" s'il est présent. De plus, "MyAssembly.xml" sera ajouté aux références s'il est présent. Ces deux fichiers seront également rafraîchis lorsque "MyAssembly.dll.refresh" est présent.
Mais, quand est-ce que Visual Studio décide de chercher les fichiers de rafraîchissement ? Rappelez-vous, dans un projet web, le fichier du projet ne garde pas trace des DLL référencées spécifiquement. Vous ne trouverez pas les DLL répertoriées dans le fichier du projet uniquement les dépendances du projet. Alors quand le rafraîchissement se produit-il ?
La réponse à quand se produit le rafraîchissement est lors d'une génération lorsque l'assemblée référencée doit être chargée. Cela signifie, cependant, que la construction d'un site web préconstruit pouvant être mis à jour ne récupérera pas toutes les DLL. J'avais constamment une DLL qui ne se rafraîchissait pas et ensuite je me suis rendu compte qu'elle était utilisée uniquement à l'intérieur d'un fichier .ascx. Décocher la case "Autoriser la mise à jour du site précompilé" dans la page du projet Options MSBuild a résolu ce problème pour moi.
Cependant, si vous ajoutez des DLL référencées qui sont chargées via réflexion dans votre code, elles ne seront pas mises à jour via une référence. Vous devrez utiliser des événements de génération pour les copier dans le répertoire bin.