2013-11-01 21 views
6

Tôi đang sử dụng các sự kiện Pre-/ Post-build trong các tệp dự án VS2012 của mình để thực hiện các tác vụ xây dựng. Điều này hoạt động hoàn toàn tốt tại địa phương, nhưng tôi có một vấn đề chạy nó từ TFS 2012 Build Server của chúng tôi.Project TargetDir trên máy chủ xây dựng TFS

Tại địa phương, $(TargetDir) cho từng dự án được đặt thành thư mục /bin riêng. Tuy nhiên,

Trên máy chủ xây dựng, nó được đặt thành một thư mục /bin duy nhất nằm ngoài thư mục gốc của giải pháp, trong đó nó hợp nhất tất cả các tệp nhị phân đã được tạo.

Đây không phải là tất cả những gì tôi muốn!
Tôi chỉ muốn máy chủ xây dựng hoạt động theo cách tương tự như bản dựng VS2012 của tôi không.
Dường như không có bất kỳ cài đặt nào trong mẫu xây dựng cho phép tôi thay đổi mẫu này.

Bất cứ ai có thể cho tôi biết cách tôi có thể làm cho máy chủ xây dựng xuất tệp nhị phân của nó thành thư mục /bin riêng biệt cho từng dự án không?

(FYI, xây dựng máy chủ được thiết lập để xây dựng các tập tin .sln, không phải một số kịch bản thêm MSBuild.)

Trả lời

2

Điều này xảy ra bởi vì MSBuild và TFSBuild là hai sản phẩm khác nhau - trên máy tính địa phương của bạn MSBuild được sử dụng để xây dựng của bạn dự án.

Một phương pháp tôi đã sử dụng để giải quyết vấn đề này phải dài hơn một chút và sử dụng kết hợp ProjectDirConfigurationName. Dưới đây là một ví dụ thực tế mà tôi đang sao chép một số tập tin cấu hình:

robocopy "$ (ProjectDir) bin \ $ (ConfigurationName)" "... thư mục đích ..." * .config

(Lưu ý rằng tôi đã gỡ bỏ con đường mục tiêu, nó không phải là cần thiết để ví dụ)

này hoạt động bất kể lắp ráp được nhắm mục tiêu cho AnyCPU hoặc x86/64, do triệu tập bao gồm của Microsoft dấu gạch chéo là một phần của tên thư mục.

+0

Cái này là TFSBuild không tạo ra bất kỳ thư mục bin trong $ (ProjectDir). Nó chỉ xây dựng vào thư mục obj và vào thư mục bin được hợp nhất bên ngoài $ (SolutionDir) và $ (ProjectDir). Tuy nhiên, tôi đã sử dụng $ (TargetDir) cho bây giờ để xác định vị trí thư mục bin hợp nhất. Cảm ơn vì đầu vào của bạn. –

7

TFS và Visual Studio đều sử dụng msbuild để xây dựng giải pháp của bạn, tuy nhiên cấu trúc thư mục của đầu ra xây dựng là khác nhau. Lý do đầu ra không có cấu trúc giống như VS là vì mẫu xây dựng TFS ghi đè thuộc tính $ (OutDir) để trỏ đến thư mục "nhị phân" trên tác nhân tạo.

Trong TFS 2012/.net 4.5 bạn có thể kiểm soát hành vi này bằng cách thông qua một cuộc tranh cãi msbuild trong định nghĩa xây dựng của bạn /p:GenerateProjectSpecificOutputFolder=true

Xem this blog để biết thêm

+0

Đây gần như là những gì tôi cần. Tuy nhiên sự kiện PRE-BUILD của tôi vẫn bị hỏng, có vẻ như các thư mục bin \ Debug cụ thể đã được "điền" quá muộn. Tôi đã thiết lập phụ thuộc chính xác và nó hoạt động trên máy tính của tôi. Bất kỳ ý tưởng? –

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