2010-02-01 7 views
11

Ich habe ein Web-Anwendungsprojekt. Ich habe DLLs, die ich in dem Projekt referenziere, das in meinem bin/ordner gespeichert wird. Nun, wenn ich eine Neuerstellung oder ein Säubern von Visual Studio mache, wird alles in diesem Ordner gelöscht. Wie verhindere ich das?Behalte Visual Studio davon ab, alles aus der Bin/beim Neuerstellen zu löschen?

+0

Y verhindert das? – madatanic

+0

Weil ich Dateien wie einige Assemblies für Steuerelemente, die nicht von uns und für Npgsql und AjaxControlToolkit und dergleichen besitzen. – Earlz

+0

Wenn Sie diese Assemblys von physischen Speicherorten hinzufügen (z. B. C: \ MyAssemblies \ ...), sind sie weiterhin vorhanden. Wenn Sie Ihr Projekt auf einem anderen Computer bereitstellen möchten, müssen Sie diese Assemblys auf diesem Computer registrieren (sie im GAC installieren), wenn es sich nicht um Systemassemblys handelt. – madatanic

Antwort

8

Ich werde bleiben weg von der Frage "Warum" fragen und nur sagen, wie. Markieren Sie die Dateien als schreibgeschützt und VS sollte sie nicht löschen.

+4

-1 habe, nur weil du deine DLLs nicht im bin-Verzeichnis speichern solltest, auch wenn es eine Möglichkeit gibt, es zum Laufen zu bringen. –

+11

Das heißt nicht, dass wir die Frage nicht beantworten sollten. Lasst uns das Heiliger retten als du für einen Ort, an dem solche Debatten angemessen sind. – billb

+0

Eigentlich war ich mehr mit der Tatsache beschäftigt, dass die Antwort sowohl angenommen als auch die höchste angenommen wurde (zu der Zeit, als ich sie herabsetzte). Sie haben Recht, dass es eine gültige Antwort auf das gegebene Problem ist. –

1

Können Sie erklären, warum Sie es zuerst im Ordner bin speichern müssen? Ich erstelle immer einen separaten Ordner für Beispiel/Komponenten, wo ich alle referenzierten DLLs speichern.

+0

IDK, bin/hat immer nur Sinn für mich gemacht. Es ist der eine Ort, an dem ausführbare Binärdateien abgelegt werden. Werden Dateien aus dem Bin verschoben/verursachen Probleme? – Earlz

+0

@Earlz, Sie sollten ein Lib-Verzeichnis haben (einige Leute mögen auch ein Drittanbieter-Verzeichnis), wo Sie referenzierte Assemblies platzieren. Ihr Build-Skript sollte diese nach Bedarf in das Verzeichnis bin kopieren, damit Sie ein sauberes Build erhalten. – Paolo

+0

@Paolo: Visual Studio kopiert sie automatisch in bin, wenn sie vom Ordner lib aus referenziert werden. –

48

Legen Sie nichts selbst in den Papierkorb. bin ist der Zielordner für Binärdateien - es ist kein Quellordner für Binärdateien.

Erstellen Sie sich einen Ordner lib oder etwas ähnliches, um Ihre Drittanbieter-Binärdateien in. Sie könnten es sogar "Third Party Binaries" nennen, da nicht jeder weiß, dass "lib" dasselbe bedeutet. Nehmen Sie Bezug auf die Binärdateien in diesem Ordner, und Visual Studio kopiert sie bei Bedarf in die Datei bin (einschließlich einer Neuerstellung).

+6

+1 Die einzige richtige Antwort auf dieses Problem. – Filburt

+0

Was ist mit Laufzeitabhängigkeiten, die Sie nicht direkt referenzieren (ich referenziere nur Build-Time-Abhängigkeiten), aber immer noch benötigt, um das Projekt zu starten? – wensveen

+0

@wen genau dasselbe - sie gehören nicht in den Behälter –

-3

Eine Sache die "mach es nicht so!" Menschen vergessen, ist die Quellcodeverwaltung und Software von Drittanbietern. Wenn Sie SVN verwenden, erhalten Sie oft Dateien, die bei Verwendung physischer Referenzen zu falschen Übereinstimmungen führen würden, wenn sie sich nicht am selben Ort befinden.

Ein CMS, mit dem ich gerade arbeite, baut das VS-Projekt und die Lösung auf, wenn Sie eine andere "Instanz" davon einrichten. Es speichert einige DLLs, die es benötigt ... aber wenn Sie es neu aufbauen, verschwinden sie.

Die einfache Lösung in beiden Fällen ist, wie oben beschrieben, und tun Sie es getan.

2

Befolgen Sie die Antwort von John Saunders und legen Sie Ihre .dll's in einen separaten Ordner. In meinem Fall habe ich diesen Ordner "ServerAssemblies" genannt. Ändere dann deine Projektdatei (in meinem Fall .csproj) und füge ein "AfterRebuild" -Ziel hinzu.

<Target Name="AfterRebuild"> 
    <ItemGroup> 
    <ExtraAssemblies Include="$(SolutionDir)ServerAssemblies\**\*.*"/> 
    </ItemGroup> 
    <Copy SourceFiles="@(ExtraAssemblies)" DestinationFolder="$(ProjectDir)bin\"></Copy> 
</Target> 
Verwandte Themen