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


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


75
2017-11-03 16:19


Ursprung


Antworten:


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

Sie werden normalerweise angezeigt, wenn Sie einen Projekttyp verwenden, der keine Standard-Visual Studio-Projektdatei erstellt, da normalerweise Pfade zu referenzierten DLLs dorthin gehen würden.


61
2017-11-03 16:25



Von Hier:

In einem ASP.NET-Projekt wird beim Hinzufügen einer dateibasierten Referenz eine .refresh-Datei im Ordner "Bin" hinzugefügt. Wenn das Projekt unter Versionskontrolle steht, wird diese Datei zur Quellcodeverwaltung hinzugefügt. *.dll.refresh Dateien, die das Verzeichnis bin werfen. Jedes Mal, wenn Sie eine externe Referenz hinzufügen, finden Sie eine dll.refresh-Datei direkt daneben. Diese dll.refresh Dateien sind eine Ausnahme von der Regel und sollten in die Quellcodeverwaltung einbezogen werden. Nur so kann Ihr Webprojekt wissen, wo seine Referenzen leben.


32
2017-11-27 18:56



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

Wie bereits erwähnt, wird beim Hinzufügen eines Verweises zu einer Assembly durch Durchsuchen eine .refresh-Datei hinzugefügt. Wenn jedoch zusätzliche abhängige DLLs in der explizit hinzugefügten DLL in dem Verzeichnis vorhanden sind, aus dem Sie hinzufügen, werden die abhängigen Elemente ebenfalls implizit hinzugefügt, jedoch ohne .refresh-Dateien! Also zum Beispiel, ich füge einen Verweis auf "MyAssembly.dll" Ich werde auch "MyAssembly.dll.refresh" bekommen. Aber wenn es eine Assembly "MyDependentAssembly.dll" gibt, von der "MyAssembly.dll" abhängt, bekomme ich keine "MyDependentAssembly.dll.refresh". Was passiert, ist, dass die eine Versammlung erneuert wird, aber nicht ihre Angehörigen! Sie müssen die DLLs nacheinander in umgekehrter Reihenfolge der Abhängigkeit hinzufügen, und dann funktionieren die Dinge besser.

Einige andere Dinge, auf die man achten sollte. Das Hinzufügen von "MyAssembly.dll" fügt "MyAssembly.pdb" hinzu, wenn es vorhanden ist. Auch "MyAssembly.xml" wird zu den Referenzen hinzugefügt, wenn es vorhanden ist. Diese beiden Dateien werden ebenfalls aktualisiert, wenn "MyAssembly.dll.refresh" vorhanden ist.

Aber wann entscheidet Visual Studio, nach Aktualisierungsdateien zu suchen? Denken Sie daran, dass die Projektdatei in einem Webprojekt die referenzierten DLLs nicht genau verfolgt. Sie werden nicht finden, dass die DLLs in der Projektdatei nur Projektabhängigkeiten aufgelistet sind. Wann findet die Aktualisierung statt?

Die Antwort auf die Aktualisierung erfolgt während eines Builds, wenn die referenzierte Assembly geladen werden muss. Das bedeutet, dass das Erstellen einer vorkompilierten aktualisierbaren Website möglicherweise nicht alle DLLs erfasst. Ich hatte eine DLL, die nicht aktualisiert wurde und dann erkannte ich, dass es nur innerhalb einer .ascx-Datei verwendet wurde. Durch das Deaktivieren der Checkbox "Vorkompilierte Site kann aktualisiert werden" auf der MSBuild Options-Projektseite wurde dieses Problem für mich behoben.

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


4
2018-04-11 21:27