Was ist eine dll.refresh-Datei in ASP.Net?

83

In unserem ASP.Net-Webprojekt scheinen einige Aktualisierungsdateien mit einigen der von uns verwendeten DLLs von Drittanbietern verknüpft zu sein. Irgendeine Idee, was sie sind und wie / wann sie erstellt werden?

Jackson Pope
quelle

Antworten:

64

Diese Dateien geben den Pfad zu der betreffenden DLL an, um Visual Studio mitzuteilen, wo sie zu finden sind (Sie können dies überprüfen, wenn Sie sie in einem Texteditor öffnen). Sie werden jedes Mal erstellt, wenn Sie dem Projekt einen neuen Verweis hinzufügen.

Sie werden normalerweise angezeigt, wenn Sie einen Projekttyp verwenden, der keine Standard-Visual Studio-Projektdatei erstellt, da dort normalerweise Pfade zu referenzierten DLLs angezeigt werden.

HullCitySteve
quelle
Finden Sie eine Aktualisierung, die funktioniert - und das ist möglicherweise der richtige Pfad. Relative Pfade sind, wie meine eingerichtet sind ../
Niico
32

Von hier aus :

In einem ASP.NET-Projekt wird durch Hinzufügen einer dateibasierten Referenz eine Aktualisierungsdatei im Ordner Bin hinzugefügt. Wenn sich das Projekt in der Quellcodeverwaltung befindet, wird diese Datei zur Quellcodeverwaltung hinzugefügt. *.dll.refreshDateien, die das bin-Verzeichnis verunreinigen. Jedes Mal, wenn Sie eine externe Referenz hinzufügen, finden Sie direkt daneben eine dll.refresh-Datei. Diese dll.refreshDateien sind eine Ausnahme von der Regel und sollten in die Quellcodeverwaltung übernommen werden. Nur so kann Ihr Webprojekt wissen, wo sich seine Referenzen befinden.

SharpUrBrain
quelle
Muss die DLL, auf die die frische Datei verweist, das .net-Format haben? Ist die frische Datei in der C ++ - DLL frisch?
Gqqnbig
5

Einige Informationen zu den Aktualisierungsdateien nach Versuch und Irrtum. Diese Experimente wurden mit Visual Studio 2012 durchgeführt. Die Referenzen wurden einem C # asp.net-Webprojekt hinzugefügt.

Wie bereits erwähnt, wird durch Hinzufügen eines Verweises auf eine Assembly über das Durchsuchen eine Aktualisierungsdatei hinzugefügt. Wenn jedoch zusätzliche abhängige DLLs für die explizit hinzugefügte DLL in dem Verzeichnis vorhanden sind, aus dem Sie hinzufügen, werden die abhängigen DLLs ebenfalls implizit hinzugefügt, jedoch ohne .refresh-Dateien! So füge ich beispielsweise einen Verweis auf "MyAssembly.dll" hinzu. Ich erhalte auch "MyAssembly.dll.refresh". Wenn es jedoch eine Assembly "MyDependentAssembly.dll" gibt, von der "MyAssembly.dll" abhängt, erhalte ich keine "MyDependentAssembly.dll.refresh". Was also passiert, ist, dass die eine Assembly aktualisiert wird, aber nicht ihre Abhängigen! Sie müssen die DLLs einzeln in umgekehrter Reihenfolge der Abhängigkeit hinzufügen, damit die Dinge besser funktionieren.

Einige andere Dinge, auf die Sie achten sollten. Durch Hinzufügen von "MyAssembly.dll" wird auch "MyAssembly.pdb" hinzugefügt, falls vorhanden. Auch "MyAssembly.xml" wird zu den Referenzen hinzugefügt, falls vorhanden. Diese beiden Dateien werden auch aktualisiert, wenn "MyAssembly.dll.refresh" vorhanden ist.

Aber wann entscheidet sich Visual Studio, nach Aktualisierungsdateien zu suchen? Denken Sie jetzt daran, dass in einem Webprojekt in der Projektdatei nicht speziell auf DLLs verwiesen wird, auf die verwiesen wird. Sie finden die in der Projektdatei aufgeführten DLLs nicht nur als Projektabhängigkeiten. Wann erfolgt die Aktualisierung?

Die Antwort auf die Aktualisierung erfolgt während eines Builds, wenn die Assembly, auf die verwiesen wird, geladen werden muss. Dies bedeutet, dass beim Erstellen einer vorgefertigten aktualisierbaren Website möglicherweise nicht alle DLLs abgerufen werden. Ich hatte immer eine DLL, die nicht aktualisiert werden konnte, und dann wurde mir klar, dass sie nur in einer .ascx-Datei verwendet wurde. Durch Deaktivieren des Kontrollkästchens "Aktualisieren vorkompilierter Site zulassen" auf der Projektseite von MSBuild Options wurde dieses Problem für mich behoben.

Wenn Sie jedoch referenzierte DLLs hinzufügen, die durch Reflektion in Ihren Code geladen werden, werden diese nicht durch eine Referenz aktualisiert. Sie müssen Build-Ereignisse verwenden, um sie in das bin-Verzeichnis zu kopieren.

Jack D Menendez
quelle
Ich denke, wenn Sie "Webprojekt" sagen, meinen Sie "Website".
J. Polfer