2010-11-03 7 views

Antwort

60

Diese Dateien geben den Pfad zur 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.

32

Von here:

In einem ASP.NET-Projekt, eine dateibasierte Referenz wird das Hinzufügen einer .refresh Datei in den Ordner Bin hinzuzufügen. 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 sie sollten in die Quellcodeverwaltung gehen. Nur so kann Ihr Webprojekt wissen, wo seine Referenzen leben.

+5

Teilweise kopiert von http://monsur.xanga.com/437206798/dllrefresh-and-aspnet/ –

+16

Hallo SharpUrBrain, es sieht so aus, als ob du den Großteil dieses Inhalts vom obigen Link kopiert hast. Können Sie Ihren Beitrag bearbeiten und dem Autor eine Zuordnung zuweisen?Plagiate sind bei Stack Overflow nicht willkommen, und es ist immer schön, Kredit zu geben, wo Kredit fällig ist. Vielen Dank! –

+0

Muss die DLL, auf die die neue Datei verweist, das .net-Format haben? Ist frische Datei in C++ DLL frisch? – Gqqnbig

4

Einige Informationen zu den Aktualisierungsdateien nach 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. Hinzufügen von "MyAssembly.dll" wird auch "MyAssembly.pdb" hinzufügen, 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 Ihren Code geladen werden, werden sie nicht durch eine Referenz aktualisiert. Sie müssen Build-Ereignisse verwenden, um sie in das Verzeichnis bin zu kopieren.

+0

Ich denke, wenn Sie "Webprojekt" sagen, meinen Sie "Website". –