Do czego służą foldery obj i bin (utworzone przez Visual Studio)?


222

Stworzyłem nowy projekt w Visual Studio 2010 i zauważył, że istnieją obecnie dwa nowe foldery o nazwie obji binmoim katalogu projektu.

Podobna para folderów jest tworzona podczas budowania i debugowania - do czego służą te foldery?

Odpowiedzi:


238

objFolder posiada obiekt lub pośredni, pliki , które zostały skompilowane pliki binarne, które nie zostały jeszcze połączone. Są to w zasadzie fragmenty, które zostaną połączone w celu uzyskania ostatecznego pliku wykonywalnego. Kompilator generuje jeden plik obiektowy dla każdego pliku źródłowego, a pliki te są umieszczane w objfolderze.

W binfolderze znajdują się pliki binarne , które są rzeczywistym kodem wykonywalnym aplikacji lub biblioteki.

Każdy z tych folderów jest dalej podzielony na foldery Debugi Releasefoldery, które po prostu odpowiadają konfiguracjom kompilacji projektu. Dwa typy plików omówione powyżej są umieszczane w odpowiednim folderze, w zależności od rodzaju wykonywanej kompilacji. Ułatwia to ustalenie, które pliki wykonywalne są zbudowane z symbolami debugowania, a które z włączonymi optymalizacjami i gotowe do wydania.

Pamiętaj, że możesz zmienić miejsce, w którym program Visual Studio wyświetla pliki wykonywalne podczas kompilacji we właściwościach projektu. Możesz także zmienić nazwy i wybrane opcje dla konfiguracji kompilacji.


4
Z jakiegokolwiek powodu mój projekt nie ma podfoldera debugowania lub wydania dla folderów obj i bin. Jeśli zmienię ustawienia projektu, aby budować do podfoldera debugowania / wydania w zależności od aktualnie wybranej konfiguracji, pojawia się błąd, że nie można utworzyć typu danych podczas debugowania aplikacji. Moja aplikacja zawsze szuka w folderze bin bibliotek dll i nigdy nie wie, by szukać w folderze debugowania lub wydania. Jak to naprawić?
Anil Natha,

3
@Sly Nie rozumiem o co pytasz. Projekt buduje aplikację (EXE) lub bibliotekę (DLL). Nie można zbudować obu. Więc jeśli projekt tworzy aplikację, nie umieści żadnych bibliotek DLL w folderze bin. A jeśli Twój projekt zbuduje bibliotekę, przy próbie debugowania pojawi się błąd, ponieważ nie można wykonać biblioteki DLL. W każdym razie wygląda na to, że zmieniłeś domyślną ścieżkę wyjściową we właściwościach projektu. Jeśli potrzebujesz dodatkowej pomocy, zadaj nowe pytanie. Należy dobrze udokumentować problem, w tym w razie potrzeby zrzuty ekranu z konfiguracji projektu.
Cody Gray

2
Zastanawiam się, czy mogę wymusić wizualne usunięcie folderu obj po kompilacji?
Johnny_D

2
@SlyRaskal Jednym z powodów, dla których możesz nie mieć folderów debugowania / wydawania, jest tworzenie projektu internetowego?
Tim Iles,

2
Czy objnaprawdę zawiera tylko niepowiązane pliki kodu obiektowego? Z mojego doświadczenia wynika, że zawiera wszystkie z nich, a na ostatnim etapie budowy, pliki, które są częścią „ostatecznego zestawu” są kopiowane do bin.
ivan_pozdeev

44

Zachęcam do obejrzenia tego filmu na YouTube, który pokazuje różnicę między folderami C # bin i obj, a także wyjaśnia, w jaki sposób czerpiemy korzyści z kompilacji przyrostowej / warunkowej.

Kompilacja w C # jest procesem dwuetapowym, więcej szczegółów znajduje się na poniższym diagramie:

  1. Kompilacja: w fazie kompilacji poszczególne pliki kodu C # są kompilowane w poszczególne skompilowane jednostki. Te poszczególne skompilowane pliki kodu znajdują się w katalogu OBJ.
  2. Łączenie: W fazie łączenia poszczególne skompilowane pliki kodu są łączone w celu utworzenia pojedynczej jednostki DLL i EXE. To idzie do katalogu BIN.

C # bin kontra obj foldery

Jeśli porównasz katalog bin i obj, w katalogu „obj” znajdziesz większą liczbę plików, ponieważ zawiera on osobne skompilowane pliki kodu, a „bin” ma jedną jednostkę.

bin vs obj


20

objKatalog jest dla pośrednich plików obiektowych i innych nieustalonych plików danych, które są generowane przez system kompilatora lub zbudować w trakcie kompilacji. binKatalog jest katalogiem, że ostateczne wyjście binarne (i wszelkie zależności lub inne pliki rozmieszczenia) zostaną zapisane.

Jeśli chcesz, możesz zmienić rzeczywiste katalogi używane do obu celów w ustawieniach projektu.


„bin” można zmienić we właściwościach projektu -> „Build” -> „Output” -> „Output path”. Ale co z „obj”?
Peter Mortensen

5

Ciekawy fakt na temat katalogu obj: Jeśli publikowanie zostało skonfigurowane w projekcie internetowym, pliki, które zostaną opublikowane, są przenoszone do obj \ Release \ Package \ PackageTmp. Jeśli chcesz samodzielnie opublikować pliki, a nie korzystać ze zintegrowanej funkcji VS, możesz pobrać pliki, które faktycznie musisz wdrożyć tutaj, zamiast wybierać wszystkie cyfrowe śmieci z katalogu bin.


0

Uważaj na setupprojekty, jeśli ich używasz; Projekty instalacyjne programu Visual Studio są Primary Outputpobierane z objfolderu, a nie z bin.

Wydawałem aplikacje, które wydawały mi się zaciemnione i zalogowałem się w msikonfiguracjach przez dłuższy czas, zanim odkryłem, że wdrożone pliki aplikacji nie były w rzeczywistości ani zaciemnione, ani podpisane, gdy wykonuję procedurę po kompilacji w binzestawach folderów i powinienem był celować w objfolder zamiast tego zespoły.

Jest to dalekie od intuicyjnego imho, ale ogólne setuppodejście polega na użyciu Primary Outputprojektu i jest to objfolder. Bardzo bym chciała, gdyby ktoś mógł rzucić nieco światła na to btw.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.