Wofür werden die Ordner obj und bin (erstellt von Visual Studio) verwendet?
222
Ich habe in Visual Studio 2010 ein neues Projekt erstellt und festgestellt, dass sich jetzt zwei neue Ordner mit dem Namen objund binin meinem Projektverzeichnis befinden.
Ein ähnliches Ordnerpaar wird beim Erstellen und Debuggen erstellt. Wozu dienen diese Ordner?
Der objOrdner enthält Objekt- oder Zwischendateien, bei denen es sich um kompilierte Binärdateien handelt, die noch nicht verknüpft wurden. Es handelt sich im Wesentlichen um Fragmente, die kombiniert werden, um die endgültige ausführbare Datei zu erstellen. Der Compiler generiert eine Objektdatei für jede Quelldatei, und diese Dateien werden in den objOrdner gelegt.
Der binOrdner enthält Binärdateien , die den tatsächlichen ausführbaren Code für Ihre Anwendung oder Bibliothek darstellen.
Jeder dieser Ordner ist weiter unterteilt in Debugund ReleaseOrdner, die einfach den Build-Konfigurationen des Projekts entsprechen. Die beiden oben beschriebenen Dateitypen werden je nach Art des von Ihnen durchgeführten Builds in den entsprechenden Ordner verschoben. Auf diese Weise können Sie leicht feststellen, welche ausführbaren Dateien mit Debugging-Symbolen erstellt wurden und welche mit aktivierten Optimierungen erstellt wurden und zur Veröffentlichung bereit sind.
Beachten Sie, dass Sie in den Eigenschaften Ihres Projekts ändern können, wo Visual Studio Ihre ausführbaren Dateien während einer Kompilierung ausgibt. Sie können auch die Namen und ausgewählten Optionen für Ihre Build-Konfigurationen ändern.
Aus irgendeinem Grund verfügt mein Projekt nicht über einen Debug- oder Release-Unterordner für die Ordner obj und bin. Wenn ich meine Projekteinstellungen so bearbeite, dass sie abhängig von der aktuell ausgewählten Konfiguration im Unterordner Debug / Release erstellt werden, wird die Fehlermeldung angezeigt, dass der Datentyp beim Debuggen meiner Anwendung nicht erstellt werden konnte. Meine App sucht immer nur im bin-Ordner nach den DLLs und weiß nie, ob sie im Debug- oder Release-Ordner suchen soll. Wie korrigiere ich das?
Anil Natha
3
@Sly Ich verstehe nicht, was du fragst. Ein Projekt erstellt entweder eine Anwendung (EXE) oder eine Bibliothek (DLL). Es kann nicht beides bauen. Wenn Ihr Projekt eine Anwendung erstellt, werden keine DLLs in Ihrem bin-Ordner abgelegt. Wenn Ihr Projekt eine Bibliothek erstellt, wird beim Debuggen eine Fehlermeldung angezeigt, da Sie keine DLL ausführen können. Wie auch immer, es hört sich so an, als hätten Sie den Standardausgabepfad in den Eigenschaften Ihres Projekts geändert. Wenn Sie weitere Hilfe benötigen, stellen Sie eine neue Frage. Stellen Sie sicher, dass Sie das Problem gut dokumentieren, einschließlich Screenshots Ihrer Projektkonfiguration, falls erforderlich.
Cody Gray
2
Ich frage mich, ob ich Visual Studio zwingen kann, den obj-Ordner zu löschen, nachdem der Build ausgeführt wurde.
Johnny_D
2
@SlyRaskal Ein Grund, warum Sie möglicherweise keine Debug- / Release-Ordner haben, ist, wenn Sie ein Webprojekt entwickeln?
Tim Iles
2
Enthält objwirklich nur nicht verknüpfte Objektcodedateien? Aus meiner Erfahrung, es enthält alle von ihnen, und in der letzten Build - Schritt, die Dateien , die Teil der „letzten Satz“ werden , sind kopiert in bin.
ivan_pozdeev
44
Ich möchte Sie ermutigen, dieses Youtube-Video zu sehen, das den Unterschied zwischen C # bin- und obj-Ordnern zeigt und auch erklärt, wie wir den Vorteil einer inkrementellen / bedingten Kompilierung nutzen.
Die C # -Kompilierung erfolgt in zwei Schritten. Weitere Informationen finden Sie im folgenden Diagramm:
Kompilieren: In der Kompilierungsphase werden einzelne C # -Codedateien zu einzelnen kompilierten Einheiten kompiliert. Diese einzelnen kompilierten Codedateien befinden sich im OBJ-Verzeichnis.
Verknüpfen: In der Verknüpfungsphase werden diese einzelnen kompilierten Codedateien verknüpft, um DLL und EXE mit einer Einheit zu erstellen. Dies geht in das BIN-Verzeichnis.
Wenn Sie sowohl das bin- als auch das obj-Verzeichnis vergleichen, finden Sie eine größere Anzahl von Dateien im "obj" -Verzeichnis, da es einzelne kompilierte Codedateien enthält, während "bin" eine einzelne Einheit hat.
Das objVerzeichnis ist für Zwischenobjektdateien und andere vorübergehende Datendateien vorgesehen, die vom Compiler oder Buildsystem während eines Builds generiert werden. Das binVerzeichnis ist das Verzeichnis, in das die endgültigen Ausgabe-Binärdateien (und alle Abhängigkeiten oder andere bereitstellbare Dateien) geschrieben werden.
Wenn Sie möchten, können Sie die tatsächlichen Verzeichnisse, die für beide Zwecke verwendet werden, in den Projekteinstellungen ändern.
"bin" kann in den Projekteigenschaften geändert werden -> "Build" -> "Output" -> "Output path". Aber was ist mit "obj"?
Peter Mortensen
5
Eine interessante Tatsache zum obj-Verzeichnis: Wenn Sie die Veröffentlichung in einem Webprojekt eingerichtet haben, werden die Dateien, die veröffentlicht werden, in obj \ Release \ Package \ PackageTmp bereitgestellt. Wenn Sie die Dateien selbst veröffentlichen möchten, anstatt die integrierte VS-Funktion zu verwenden, können Sie die Dateien abrufen, die Sie tatsächlich hier bereitstellen müssen, anstatt alle digitalen Ablagerungen im bin-Verzeichnis zu durchsuchen.
Seien Sie vorsichtig mit setupProjekten, wenn Sie sie verwenden. Visual Studio-Setup-Projekte werden eher Primary Outputaus dem objOrdner als aus dem Ordner gezogenbin .
Ich habe Anwendungen veröffentlicht, von denen ich dachte, dass sie verschleiert und in msiSetups signiert sind, bevor ich festgestellt habe, dass die bereitgestellten Anwendungsdateien tatsächlich weder verschleiert noch signiert sind, da ich das Post-Build-Verfahren für die binOrdner-Assemblys ausgeführt habe und auf den objOrdner abzielen sollte stattdessen Baugruppen.
Dies ist alles andere als intuitiv imho, aber der allgemeine setupAnsatz besteht darin, das Primary Outputdes Projekts zu verwenden, und dies ist der objOrdner. Ich würde es lieben, wenn jemand etwas Licht ins Dunkel bringen könnte.
obj
wirklich nur nicht verknüpfte Objektcodedateien? Aus meiner Erfahrung, es enthält alle von ihnen, und in der letzten Build - Schritt, die Dateien , die Teil der „letzten Satz“ werden , sind kopiert inbin
.Ich möchte Sie ermutigen, dieses Youtube-Video zu sehen, das den Unterschied zwischen C # bin- und obj-Ordnern zeigt und auch erklärt, wie wir den Vorteil einer inkrementellen / bedingten Kompilierung nutzen.
Die C # -Kompilierung erfolgt in zwei Schritten. Weitere Informationen finden Sie im folgenden Diagramm:
Wenn Sie sowohl das bin- als auch das obj-Verzeichnis vergleichen, finden Sie eine größere Anzahl von Dateien im "obj" -Verzeichnis, da es einzelne kompilierte Codedateien enthält, während "bin" eine einzelne Einheit hat.
quelle
Das
obj
Verzeichnis ist für Zwischenobjektdateien und andere vorübergehende Datendateien vorgesehen, die vom Compiler oder Buildsystem während eines Builds generiert werden. Dasbin
Verzeichnis ist das Verzeichnis, in das die endgültigen Ausgabe-Binärdateien (und alle Abhängigkeiten oder andere bereitstellbare Dateien) geschrieben werden.Wenn Sie möchten, können Sie die tatsächlichen Verzeichnisse, die für beide Zwecke verwendet werden, in den Projekteinstellungen ändern.
quelle
Eine interessante Tatsache zum obj-Verzeichnis: Wenn Sie die Veröffentlichung in einem Webprojekt eingerichtet haben, werden die Dateien, die veröffentlicht werden, in obj \ Release \ Package \ PackageTmp bereitgestellt. Wenn Sie die Dateien selbst veröffentlichen möchten, anstatt die integrierte VS-Funktion zu verwenden, können Sie die Dateien abrufen, die Sie tatsächlich hier bereitstellen müssen, anstatt alle digitalen Ablagerungen im bin-Verzeichnis zu durchsuchen.
quelle
Seien Sie vorsichtig mit
setup
Projekten, wenn Sie sie verwenden. Visual Studio-Setup-Projekte werden eherPrimary Output
aus demobj
Ordner als aus dem Ordner gezogenbin
.Ich habe Anwendungen veröffentlicht, von denen ich dachte, dass sie verschleiert und in
msi
Setups signiert sind, bevor ich festgestellt habe, dass die bereitgestellten Anwendungsdateien tatsächlich weder verschleiert noch signiert sind, da ich das Post-Build-Verfahren für diebin
Ordner-Assemblys ausgeführt habe und auf denobj
Ordner abzielen sollte stattdessen Baugruppen.Dies ist alles andere als intuitiv imho, aber der allgemeine
setup
Ansatz besteht darin, dasPrimary Output
des Projekts zu verwenden, und dies ist derobj
Ordner. Ich würde es lieben, wenn jemand etwas Licht ins Dunkel bringen könnte.quelle