2010-02-23 30 views
8

Tôi có một dự án Sitecore/ASP.NET mà tôi đang phát triển. Hôm nay tại một số điểm tôi vô tình nhấn tùy chọn "Clean" trong menu ngữ cảnh giải pháp. Tôi mất một thời gian để tìm ra lý do tại sao trang web của tôi vô vọng bị hỏng. Hóa ra Visual Studio đã đi trước và xóa một số cụm từ cần thiết từ thư mục \ bin mà không phải là một phần của dự án của tôi.Làm cách nào để ngăn chặn lệnh "Sạch" của Visual Studio 2005 khỏi việc xóa các tệp nhị phân của bên thứ ba?

Làm cách nào để ngăn điều này xảy ra lần nữa?

Điều kỳ lạ là nó KHÔNG xóa mọi thứ ... chỉ một số ít. Nó để lại nhiều thứ không được tham chiếu trực tiếp bởi dự án của tôi. Điều này làm cho tôi tự hỏi chính xác những gì tính năng này là nghĩa vụ phải làm gì? Có một số loại tập tin cờ tôi có thể thiết lập? Không có tệp nào được đặt thành chỉ đọc. Nếu bạn quan tâm đến chi tiết, sau đây đã bị xóa:

Sitecore.Analytics.dll
Sitecore.Client.XML
Stimulsoft.Base.dll
Stimulsoft.Report.dll
Stimulsoft.Report.Web .dll
Stimulsoft.Report.WebDesign.dll
Telerik.Web.UI.dll

CẬP NHẬT: Bạn biết những gì ... tôi đoán những gì tôi thực sự quan tâm nhiều hơn ở đây là WH Y Visual Studio để lại hầu hết các tệp và chỉ xóa những tệp cụ thể này.

+0

Không phải là nó xóa tất cả mọi thứ trong thư mục bin? –

+0

Chắc chắn là không. Hầu hết các tệp nhị phân Sitecore (do trình cài đặt đặt) vẫn giữ nguyên. – Bryan

+0

Trong số các tệp bị xóa, tất cả chúng có phải là đầu ra của dự án hay được tham chiếu dưới dạng phụ thuộc của dự án không? –

Trả lời

8

Câu trả lời đúng cho vấn đề của bạn sẽ phụ thuộc vào cách bạn tham chiếu các hội đồng và cách bạn đưa chúng vào kết quả dự án của bạn.

binobj thư mục được tạo bởi dự án được coi là thư mục "đầu ra" tốt nhất; các thư mục này chỉ nên chứa các tệp được tạo bởi dự án xây dựng.

Khi bạn thực hiện sạch hoặc xây dựng lại dự án, tất cả các tệp trung gian và biên dịch sẽ bị xóa khỏi các thư mục này.

Bạn sẽ cảm thấy thoải mái khi điều này xảy ra.

Bạn sẽ có thể khôi phục các thư mục này bằng cách chạy quá trình tạo bất cứ lúc nào. Nếu bạn đã thêm trực tiếp các tệp vào các thư mục này, nó sẽ phá vỡ mục đích của các thư mục này và có nghĩa là bạn nên suy nghĩ lại cách bạn đang thêm các tệp đó.

Cách ưa thích để tham chiếu các bộ sưu tập được biên dịch là thêm chúng vào đâu đó bên trong thư mục nguồn của bạn. Từ đó, chúng có thể được thêm vào hệ thống kiểm soát nguồn dễ dàng như bất kỳ tệp nào khác và có thể được tham chiếu/sao chép bởi các dự án phụ thuộc vào chúng. Trong công việc của tôi, chúng tôi có một thư mục "Thư viện" chứa nhiều hội đồng của bên thứ ba được tham chiếu bởi nhiều dự án trong hệ thống phân cấp giải pháp của chúng tôi.

Hãy thử sử dụng một cây nguồn như thế này và nhìn thấy nếu nó làm việc cho bạn:

  • /dự án/Giải pháp của tôi/
  • /dự án/Giải pháp của tôi/thư viện/
  • /dự án/Giải pháp của tôi/dự án A/
  • /dự án/My Solution/Project B/
+0

Anh hùng ... câu trả lời của bạn có ý nghĩa trên bề mặt ... ít nhất, nó có thể là cách mà Visual Studio * nên * hành xử. Nhưng rõ ràng là không, vì việc dọn dẹp/xây dựng lại để lại nhiều DLL khác trong thư mục bin không được xây dựng hoặc tham chiếu bởi dự án của tôi. Dự án của tôi được thiết lập như Sitecore đề xuất. – Bryan

+0

Nếu bạn xóa thư mục 'bin' theo cách thủ công và thực hiện xây dựng lại, kết quả là gì? –

+0

Thảm họa. Sitecore khuyến cáo rằng gốc của dự án của bạn là gốc của trang web ... nơi mà nó đã cài đặt nhiều DLL vào thư mục \ bin. Việc xóa thư mục bin sẽ xóa tất cả những điều này và phá hủy ứng dụng web của bạn. – Bryan

1

Tôi tin rằng nếu bạn đặt các tệp này trong thư mục con khác với bin, Visual Studio sẽ không xóa chúng. Bạn vẫn có thể làm cho thư mục con mới của bạn triển khai.

5

Đặt các dll vào một thư mục khác. Có thể bạn sẽ không muốn chúng như một phần của dự án. Tham khảo các dll từ thư mục mới. Khi bạn biên dịch các dlls sẽ được sao chép vào thư mục bin.

Tôi làm việc với nhiều dự án và giữ thư mục bin ở thư mục gốc của dự án của tôi để lưu trữ dll của bên thứ 3 vì lý do chính xác này.

Ví dụ cấu trúc thư mục:

 
MyProjects 
- bin 
    - 3rdParty.dll 
- Project1 
- Project2 
- ProjectN 

này cho phép tất cả các dự án để có một vị trí tham khảo nổi tiếng với dlls bên thứ 3 mà không cần phải sao chép các dll vào từng dự án.

Nếu bạn đang làm việc theo nhóm, tất cả các bạn nên đồng ý với cấu trúc thư mục chuẩn cho mã của mình. Điều này sẽ giúp bạn tiết kiệm rất nhiều đau đầu hơn chỉ này.

+0

Có, điều này sẽ làm việc tuyệt vời nếu các DLL đã được thực sự tham chiếu bởi dự án của tôi và tôi đã không làm việc trên một ứng dụng ASP.NET. – Bryan

4

Trong trường hợp Sitecore, chỉ cần đảm bảo đặt thuộc tính của tham chiếu (Sitecore.Kernel, Sitecore.Client, v.v.): 'Sao chép cục bộ' = false.

+0

Điều này thưa ông là câu trả lời của bạn, Sitecore tài liệu và đào tạo gọi này ra. – techphoria414

5

Chúng tôi luôn luôn thêm một sự kiện AfterBuild đến hồ sơ dự án chứa Sitecore.

<Target Name="AfterBuild"> 
    <CreateItem Include="$(SolutionDir)\Third Party\Sitecore\*.*"> 
     <Output TaskParameter="Include" ItemName="FilesToArchive" /> 
    </CreateItem> 
    <Copy SourceFiles="@(FilesToArchive)" DestinationFolder="$(TargetDir)\%(FilesToArchive.RecursiveDir)" /> 
    </Target> 

Trường hợp CreateItem Include là đường dẫn đến nơi bạn đã đặt các tệp nhị phân Sitecore.

+0

+1 Để sử dụng cẩn thận msbuild. Bạn có thể muốn thêm một số chi tiết về nơi để đặt phần cấu hình này mặc dù :) –

0

Vâng, tôi sẽ tiếp tục và trả lời câu hỏi của riêng tôi, vì nó có vẻ như câu trả lời đơn giản nhất cho đến nay. Tôi đã đánh dấu các hội đồng được đề cập là Chỉ đọc. Bây giờ họ không được làm sạch.

Vẫn tự hỏi tại sao hầu hết những người khác không bị xóa.

Các vấn đề liên quan