Antworten:
Der obj
Ordner 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 obj
Ordner gelegt.
Der bin
Ordner 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 Debug
und Release
Ordner, 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.
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 in bin
.
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.
Das obj
Verzeichnis ist für Zwischenobjektdateien und andere vorübergehende Datendateien vorgesehen, die vom Compiler oder Buildsystem während eines Builds generiert werden. Das bin
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.
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 setup
Projekten, wenn Sie sie verwenden. Visual Studio-Setup-Projekte werden eher Primary Output
aus dem obj
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 die bin
Ordner-Assemblys ausgeführt habe und auf den obj
Ordner abzielen sollte stattdessen Baugruppen.
Dies ist alles andere als intuitiv imho, aber der allgemeine setup
Ansatz besteht darin, das Primary Output
des Projekts zu verwenden, und dies ist der obj
Ordner. Ich würde es lieben, wenn jemand etwas Licht ins Dunkel bringen könnte.