Các thư mục obj và bin (được tạo bởi Visual Studio) được sử dụng để làm gì?


222

Tôi đã tạo một dự án mới trong Visual Studio 2010 và nhận thấy rằng bây giờ có hai thư mục mới có tên objbintrong thư mục dự án của tôi.

Một cặp thư mục tương tự được tạo khi xây dựng và gỡ lỗi - những thư mục này để làm gì?

Câu trả lời:


238

Các objthư mục chứa đối tượng, hoặc trung gian, các file , được biên soạn tập tin nhị phân chưa được liên kết nào. Về cơ bản, chúng là những mảnh vỡ sẽ được kết hợp để tạo ra tệp thực thi cuối cùng. Trình biên dịch tạo một tệp đối tượng cho mỗi tệp nguồn và các tệp đó được đặt vào objthư mục.

Các binthư mục chứa tập tin nhị phân , đó là những mã thực thi thực tế cho ứng dụng hoặc thư viện của bạn.

Mỗi thư mục này được chia nhỏ hơn nữa DebugReleasecác thư mục, tương ứng với các cấu hình xây dựng của dự án. Hai loại tệp được thảo luận ở trên được đặt vào thư mục thích hợp, tùy thuộc vào loại bản dựng bạn thực hiện. Điều này giúp bạn dễ dàng xác định những tệp thực thi nào được xây dựng với các biểu tượng gỡ lỗi và được xây dựng với tối ưu hóa được kích hoạt và sẵn sàng để phát hành.

Lưu ý rằng bạn có thể thay đổi nơi Visual Studio xuất các tệp thực thi của bạn trong quá trình biên dịch trong Thuộc tính của dự án. Bạn cũng có thể thay đổi tên và các tùy chọn đã chọn cho cấu hình bản dựng của mình.


4
Vì lý do nào, dự án của tôi không có thư mục gỡ lỗi hoặc phát hành cho các thư mục obj và bin. Nếu tôi chỉnh sửa cài đặt dự án của mình để xây dựng vào thư mục con gỡ lỗi / phát hành tùy thuộc vào cấu hình hiện được chọn, tôi sẽ gặp lỗi khi loại dữ liệu không thể được tạo khi tôi gỡ lỗi ứng dụng của mình. Ứng dụng của tôi chỉ tìm trong thư mục bin cho các dll và không bao giờ biết tìm trong thư mục gỡ lỗi hoặc phát hành. Làm thế nào để tôi sửa điều này?
Anil Natha

3
@Sly Tôi không hiểu bạn đang hỏi gì. Một dự án xây dựng một ứng dụng (EXE) hoặc thư viện (DLL). Nó không thể xây dựng cả hai. Vì vậy, nếu dự án của bạn tạo ra một ứng dụng, nó sẽ không đặt bất kỳ DLL nào vào thư mục bin của bạn. Và nếu dự án của bạn xây dựng thư viện, bạn sẽ gặp lỗi khi bạn cố gắng gỡ lỗi vì bạn không thể thực thi DLL. Dù sao, có vẻ như bạn đã thay đổi đường dẫn đầu ra mặc định trong các thuộc tính của dự án. Nếu bạn cần thêm trợ giúp, hãy hỏi một câu hỏi mới. Hãy chắc chắn ghi lại vấn đề tốt, bao gồm cả ảnh chụp màn hình cấu hình dự án của bạn nếu cần thiết.
Cody Grey

2
Tôi tự hỏi nếu tôi có thể buộc visual studio xóa thư mục obj sau khi xây dựng được hoàn thành?
Johnny_D

2
@SlyRaskal Một lý do tại sao bạn có thể không có thư mục Gỡ lỗi / Phát hành là nếu bạn đang phát triển một dự án web?
Tim Iles

2
objthực sự chỉ chứa các tệp mã đối tượng không liên kết ? Theo kinh nghiệm của tôi, nó chứa tất cả chúng, và ở bước xây dựng cuối cùng, các tệp là một phần của "bộ cuối cùng" được sao chép vào bin.
ivan_pozdeev

44

Tôi sẽ khuyến khích bạn xem video youtube này thể hiện sự khác biệt giữa các thư mục C # bin và obj và cũng giải thích cách chúng tôi nhận được lợi ích của việc biên dịch gia tăng / có điều kiện.

Quá trình biên dịch C # là một quá trình gồm hai bước, xem sơ đồ bên dưới để biết thêm chi tiết:

  1. Biên dịch: Trong giai đoạn biên dịch, các tệp mã C # riêng lẻ được biên dịch thành các đơn vị được biên dịch riêng lẻ. Các tệp mã được biên dịch riêng lẻ này đi trong thư mục OBJ.
  2. Liên kết: Trong giai đoạn liên kết, các tệp mã được biên dịch riêng lẻ này được liên kết để tạo đơn vị DLL và EXE. Điều này đi trong thư mục BIN.

Thư mục C # bin vs obj

Nếu bạn so sánh cả thư mục bin và obj, bạn sẽ tìm thấy số lượng tệp lớn hơn trong thư mục "obj" vì nó có các tệp mã được biên dịch riêng lẻ trong khi "bin" có một đơn vị.

bin vs obj


20

Thư objmục dành cho các tệp đối tượng trung gian và các tệp dữ liệu thoáng qua khác được tạo bởi trình biên dịch hoặc hệ thống xây dựng trong quá trình xây dựng. Thư mục binlà thư mục mà các nhị phân đầu ra cuối cùng (và mọi phụ thuộc hoặc các tệp có thể triển khai khác) sẽ được ghi vào.

Bạn có thể thay đổi các thư mục thực tế được sử dụng cho cả hai mục đích trong cài đặt dự án, nếu bạn muốn.


"Bin" có thể được thay đổi trong thuộc tính dự án -> "Build" -> "Đầu ra" -> "Đường dẫn đầu ra". Nhưng còn "obj" thì sao?
Peter Mortensen

5

Một sự thật thú vị về thư mục obj: Nếu bạn đã xuất bản được thiết lập trong một dự án web, các tệp sẽ được xuất bản sẽ được phân loại thành obj \ Release \ Package \ PackageTmp. Nếu bạn muốn tự xuất bản các tệp thay vì sử dụng tính năng VS tích hợp, bạn có thể lấy các tệp mà bạn thực sự cần triển khai ở đây, thay vì chọn qua tất cả các mảnh vỡ kỹ thuật số trong thư mục bin.


0

Hãy cẩn thận với setupcác dự án nếu bạn đang sử dụng chúng; Các dự án thiết lập Visual Studio Primary Outputlấy từ objthư mục chứ không phải bin.

Tôi đã phát hành các ứng dụng mà tôi nghĩ đã bị xáo trộn và đăng nhập msicác thiết lập trong một thời gian trước khi tôi phát hiện ra rằng các tệp ứng dụng được triển khai thực sự không bị xáo trộn cũng như không được ký khi tôi thực hiện quy trình hậu xây dựng trên các binthư mục và nên nhắm mục tiêu vào objthư mục lắp ráp thay thế.

Điều này khác xa so với imho trực quan, nhưng setupcách tiếp cận chung là sử dụng Primary Outputdự án và đây là objthư mục. Tôi thích nó nếu ai đó có thể làm sáng tỏ btw này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.