2013-06-12 31 views
16

Tôi đang làm việc trên một dự án yêu cầu các tệp DLL được tạo bằng cách xây dựng giải pháp của tôi được sao chép từ thư mục bin sang thư mục khác, cả hai đều nằm trên máy của tôi, trong ổ C của tôi. Tôi đã viết một tập tin batch để sử dụng xcopy để thực hiện điều này, bạn có thể thấy ở đây:Làm cách nào để sửa lỗi MSB3073 trong sự kiện sau khi tạo dựng?

xcopy /s /y /q "C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.dll" "C:\inetpub\wwwroot\AppServer\bin\" 
xcopy /s /y /q "C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.pdb" "C:\inetpub\wwwroot\AppServer\bin\" 

Bây giờ, tôi đã cố gắng nhiều lần lặp của tập tin này, được đặt tại địa chỉ:

C:\Users\scogan\Desktop\CopyFiles.bat 

nên sau xây dựng dòng lệnh sự kiện của tôi trông như thế này:

call C:\Users\scogan\Desktop\CopyFiles.bat 

tôi đã chạy tập tin thực thi này ngày của riêng mình với hai tập tin văn bản trong thư mục trên máy tính để bàn của tôi, và nó hoạt động tốt. Tôi cũng chạy nó vì nó là với các tập tin tôi cần phải sao chép ngày của riêng mình, và điều đó cũng hoạt động tốt. Tuy nhiên, khi tôi cố gắng chạy điều này dưới dạng sự kiện sau xây dựng, tôi nhận được kết quả này:

1> Organizr -> C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Client\bin\Debug\Organizr.exe 
1> File not found - Organizr.Services.dll 
1> 0 File(s) copied 
1> 0 File(s) copied 
1> File not found - Organizr.Services.pdb 
1>c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(4291,5): error MSB3073: The command "call C:\Users\scogan\Desktop\CopyFiles.bat" exited with code 4. 

Tôi đã thực hiện một số nghiên cứu và thấy rằng mã lỗi 4 có nghĩa là "Lỗi khởi tạo đã xảy ra". đủ bộ nhớ hoặc dung lượng đĩa, hoặc bạn đã nhập một tên ổ đĩa không hợp lệ hoặc cú pháp không hợp lệ trên dòng lệnh. "

Tôi cũng đã tìm hiểu xem MSB3073 là gì và chưa thực sự tìm thấy nhiều thứ có thể giúp tôi ở đó. Vì vậy, câu hỏi của tôi là tôi đang làm gì sai? Các con đường tuyệt đối có làm rối tung nó lên không? Bất kỳ trợ giúp nào ở đây đều được đánh giá cao.

Trả lời

19

Chơi xung quanh với các thuộc tính dự án khác nhau, tôi thấy rằng thứ tự xây dựng dự án là vấn đề. Dự án tạo các tệp tôi muốn sao chép được xây dựng giây thứ hai, nhưng dự án đang chạy tệp hàng loạt dưới dạng sự kiện sau xây dựng đã được xây dựng đầu tiên, vì vậy tôi chỉ cần đính kèm sự kiện xây dựng vào dự án thứ hai. và nó hoạt động tốt. Cảm ơn sự giúp đỡ của bạn, tất cả mọi người, mặc dù.

+0

Điều này đã khắc phục được sự cố cho tôi. Một mô-đun mới đã được thêm vào sử dụng các tệp giống với tệp có sự kiện xây dựng bài đăng. Tôi đã thêm các phụ thuộc mới và nó đã hoạt động trở lại. – vasquez

12

Ưu tiên tác vụ MsBuild "Sao chép" trong mục tiêu Sau khi xây dựng qua sự kiện sau xây dựng.

Nối mục tiêu này vào tệp dự án của bạn và xóa PostBuildEvent.

<Target Name="AfterBuild"> 
    <Copy SourceFiles="C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.*" 
      DestinationFolder="C:\inetpub\wwwroot\AppServer\bin\" 
      OverwriteReadOnlyFiles="true" 
      SkipUnchangedFiles="false" /> 
</Target> 
+1

Tuyệt, tôi sẽ chụp ảnh vào ngày mai khi tôi trở lại làm việc. Tôi chỉ bối rối bởi vì điều này chỉ không làm việc với hai tập tin này. Tôi đã thử nó với hai tập tin không liên quan đến dự án trên máy tính để bàn của tôi, và làm việc tốt như là một sự kiện sau xây dựng. –

+0

Thậm chí tốt hơn khi bạn chỉ định tệp bằng siêu dữ liệu thay vì đường dẫn được mã hóa cứng, ví dụ: SourceFiles = "$ (TargetPath)". –

+0

@Nick Carlson, nơi tôi thực sự nối thêm điều này? Bạn có ý nghĩa gì bởi tệp dự án? Giống như, MainWindow.xaml? –

7

Đối với những gì đáng giá, sự cố trong trường hợp của tôi là do sử dụng '/' làm dấu tách thư mục trong lệnh copy. Phải sử dụng dấu gạch chéo ngược.

1

Nếu sự cố vẫn tiếp diễn ngay cả sau khi đặt sau khi xây dựng trong dự án chính xác, hãy thử sử dụng "sao chép" thay vì xcopy. Điều này làm việc cho tôi.

0

Tôi đã gặp vấn đề tương tự đối với dự án Thử nghiệm của mình. Tôi phát hiện ra lý do tại sao sự kiện xây dựng bài đăng của tôi không hoạt động và đó là vì tôi đã sao chép tệp trước khi chạy lệnh .exe và một số tệp này đã được yêu cầu cho chính dự án Thử nghiệm. Do đó, chỉ cần di chuyển $ (ProjectName) .exe làm lệnh đầu tiên khắc phục sự cố.

3

Trong trường hợp của tôi, dll tôi đã tạo bằng cách xây dựng dự án vẫn đang được sử dụng trong nền. Tôi đã giết ứng dụng và sau đó xcopy làm việc tốt như mong đợi.

+0

đây là giải pháp cứu sinh :) –

0

Quá muộn nhưng đăng kinh nghiệm của tôi cho những người xem nó sau: - Trong MS VS 2010, tôi có cùng một vấn đề. Nó đã được giải quyết bằng cách đặt dấu ngoặc kép để đăng lệnh xây dựng lệnh args có chứa dấu cách !!!

Trong Project Properties -> Configuration Properties -> Xây dựng Sự kiện -> Post-Build Event -> Command Line thay đổi

copy $ (ProjectDir) a \ b \ c $ (OutputPath)

để

bản sao "$ (ProjectDir) a \ b \ c" "$ (OutputPath)"

0

tôi đã tìm thấy vấn đề này xảy ra khi bạn có nhiều dự án xây dựng song song và một hoặc nhiều dự án đang cố gắng sao chép cùng một tệp, tạo điều kiện cho cuộc đua sẽ dẫn đến thỉnh thoảng lỗi. Vậy làm thế nào để giải quyết nó?

Có rất nhiều tùy chọn, như trên chỉ thay đổi mọi thứ xung quanh có thể giải quyết vấn đề cho một số người. Các giải pháp mạnh mẽ hơn sẽ là ...

a. Hạn chế các tệp được sao chép tức là thay vì xcopy $ (TargetDir) ." ... thay vì làm xcopy "$ (TargetDir) $ (TargetName). *" ...

b. Catch lỗi và thử lại tức là

:loop 
xcopy /Y /R /S /J /Q "$(TargetDir)$(TargetName).*" "somewhere" 
if ErrorLevel 1 goto loop 

c. Tài robocopy thay vì xcopy

d. bạn có thể sẽ không muốn làm điều này vì nó sẽ làm tăng xây dựng của bạn lần, nhưng bạn có thể giảm số lượng tối đa của dự án song song xây dựng tới 1 ... enter image description here

0

The Post-xây dựng tổ chức sự kiện (trong Xây dựng sự kiện, trong thuộc tính hộp thoại) của dự án đã nhập, đã có biến môi trường chưa được xác định.
Điều hướng đến Control Panel\All Control Panel Items\System\Advanced system settings để thêm environment variable, and doing no more thích hợp hơn khởi động lại VS2017 đã giải quyết lỗi.

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