2009-07-22 24 views
17

Giải pháp studio trực quan của tôi bao gồm ứng dụng web và ứng dụng thử nghiệm đơn vị. Ứng dụng web của tôi sử dụng log4net. Tôi muốn có thể sử dụng msbuild từ dòng lệnh để xây dựng giải pháp của tôi. Tuy nhiên, bất cứ khi nào tôi xây dựng giải pháp từ dòng lệnh, tôi nhận được các lỗi xây dựng vì nó không thể sao chép log4net.xml vào thư mục bin của dự án thử nghiệm.Làm cách nào để ngăn Visual Studio khóa các tệp tài liệu xml trong thư mục bin?

Các thông báo lỗi là:.

"Không thể sao chép tập tin '\ bin \ log4net.xml' thành 'bin \ Debug \ log4net.xml' Truy cập vào đường dẫn '\ bin \ log4net.xml ' bị từ chối."

Dường như Visual Studio đang khóa tệp này, nhưng tôi không thể hiểu tại sao nó cần. Có cách nào để ngăn VS khóa các tệp tài liệu XML trong một dự án mà nó đã tải không?

Trả lời

1

Tôi cũng gặp vấn đề này với Visual Studio. Chúng tôi sử dụng NAnt thay vì MSBuild, nhưng vấn đề là như nhau. Tôi đã có thể làm việc xung quanh nó bằng cách sửa đổi các tập tin xây dựng để bỏ qua thất bại khi sao chép tài liệu xml. Lưu ý rằng điều này không thực sự giải quyết vấn đề ban đầu vì các tệp xml vẫn bị khóa, nhưng cách giải quyết này đủ tốt cho chúng tôi vì nội dung thực tế của tài liệu xml của chúng tôi không thay đổi thường xuyên.

0

Về cơ bản, không kiểm tra tệp vào thư mục bin, đó là ý tưởng tồi.

Bạn có thể thả tệp này vào một thư mục khác và tham chiếu từ đó hoặc đặt mã sử dụng nó vào thư viện và có sự kiện xây dựng bài đăng trên bản sao đó vào thư mục bin và sau đó tham chiếu.

Msbuild sau đó sẽ sao chép đó vào thư mục bin webprojects cho bạn :)

Chúng tôi có vấn đề này chính xác với những người kiểm tra trong công cụ để thư mục bin, trừ khi bạn hoàn toàn có thư mục bin nên hoặc không được kiểm tra trong ở tất cả hoặc chỉ có các tệp .refresh trong đó để tránh những vấn đề về khóa này.

Trả lời trễ, xin lỗi :)

+0

Các câu hỏi ban đầu đã không chỉ ra rằng bất kỳ các tệp đã được kiểm tra vào thư mục bin, chỉ rằng chúng được sao chép ở đó trong quá trình xây dựng. Điều đó đang được nói, tôi đồng ý rằng, nói chung, các tập tin không nên được kiểm tra vào thư mục bin của một dự án. –

+0

Ahh xin lỗi về điều đó, tôi đã đọc lại và bạn đã đúng :) Tuy nhiên, tôi thấy rất khó xử khi bạn không thể sử dụng các sự kiện trước và sau khi xây dựng các loại dự án này, cuối cùng tôi đã kết thúc lên giải quyết vấn đề bằng cách có một thư mục phụ thuộc và msbuild luôn sao chép các assembly một cách chính xác. –

1

Krystan đã viết:

Bạn có thể thả file này vào thư mục khác và tham khảo nó từ đó hoặc mã nơi có sử dụng nó vào một thư viện và có trường hợp bài xây dựng trên đó sao chép nó vào thư mục bin của nó và sau đó tham khảo.

Sự cố khóa tệp xml của chúng tôi không nằm trong thư mục bin dự án, thay vì thư mục tham khảo bên ngoài. Chúng tôi nhấn nó khi thực hiện TortoiseSVN-> Cập nhật nơi có phiên bản mới. Giả sử đó là vì VS đang sử dụng tệp cho intellisense.

Đối với những người gặp sự cố khóa này do TortoiseSVN-> Cập nhật, tôi hiện đang thử nghiệm một móc cập nhật xóa (các) tệp vi phạm trước khi cập nhật (chúng sẽ được khôi phục nếu không cần cập nhật) , cho đến nay điều này dường như làm việc (đó là lạ) nhưng tôi đã không thử nghiệm nó kỹ lưỡng, đủ để nói chắc chắn. Sẽ cập nhật câu trả lời này nếu nó chứng tỏ đáng tin cậy.

Đây là hy vọng MS sửa lỗi trong VS 2010.

+0

Tôi đang đối mặt với cùng một vấn đề. Workaround của bạn hoạt động tốt nhưng nó lạ rằng TSVN acn xóa các tập tin, nhưng không ghi đè lên nó!? –

8

tôi đã tìm thấy các giải pháp sau đây: Trong VS kiện postbuild hoặc trong Nant/MSBuild kịch bản thực thi kịch bản cmd

handle.exe -p devenv [Path to the folder with locked files] > handles.txt 

FOR /F "skip=5 tokens=3,4 delims=: " %%i IN (handles.txt) DO handle -p %%i -c %%j -y 

handle.exe có sẵn ở đây http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx

dòng đầu tiên của kịch bản dumps để handles.txt tất cả các xử lý cho các tập tin bị khóa bởi VS dòng thứ hai đọc id xử lý từ tập tin và giết các tay cầm

Sau khi tập lệnh được thực hiện tập tin có thể được rem oved/replace/moved etc

+0

câu trả lời xuất sắc. hoạt động như một nét duyên dáng, và cho phép tôi viết các kịch bản xây dựng của tôi như thể Visual Studio đang hoạt động thay vì viết các kịch bản xây dựng của tôi xung quanh một VS bị lỗi. – Adam

+1

Tôi đang sử dụng Xử lý 3.46 và tôi phải thay đổi 'mã thông báo = 3,4' thành' mã thông báo = 3,6'. Sau đó nó hoạt động hoàn hảo nhờ. – OlduwanSteve

2

Nếu bạn ổn với việc bỏ qua các tệp pdbpdb hoàn toàn từ đầu ra, bạn có thể chuyển /p:AllowedReferenceRelatedFileExtensions=none thành msbuild trên dòng lệnh.

(Nhờ câu trả lời liên quan https://stackoverflow.com/a/8757941/251011)

EDIT: Nếu bạn cũng có vấn đề với các tập tin dll có lỗi này, tôi gần đây đã phát hiện ra một giải pháp biến môi trường: https://stackoverflow.com/a/23069603/251011

+1

Ngoài ra: Đó là một chút thú vị rằng sau gần năm năm VS vẫn khóa như thế này và chúng tôi vẫn không biết * tại sao *. –

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