2010-04-16 48 views
11

Một câu hỏi tương tự đã được hỏi và trả lời khoảng một năm trước, nhưng lại là một vấn đề khác (mọi thứ đã được thử nghiệm) hoặc bị chẩn đoán sai. Nó nằm ở đây: MSbuild task fails because "Any CPU" solution is built out of order.Tại sao Tfs2010 xây dựng dự án Wix của tôi trước bất kỳ dự án nào khác?

Vấn đề của tôi là tôi có dự án trình cài đặt wix và sau khi nâng cấp lên Tfs2010 vào thứ hai, bản dựng không thành công vì không thể tìm thấy sản phẩm xây dựng của ứng dụng Wpf trong dự án. Sau khi đào một số, đó là bởi vì nó chưa được xây dựng. Xây dựng trong Vs2010 hoạt động như bình thường. Dự án wix được thiết lập để phụ thuộc vào dự án Wpf, và khi xem Project Build Order trong IDE, mọi thứ trông như bình thường.

Vấn đề ban đầu chỉ gặp phải với hai định nghĩa nền tảng trong giải pháp; x86 và x64. Ngoài ra còn có hai hương vị, Debug và Release, và TFSBuild.proj được thiết lập để xây dựng tất cả bốn kết hợp. Không có sự xuất hiện của AnyCPU ở bất cứ đâu. Mỗi câu hỏi được tham chiếu ở trên, tôi đã thử thay đổi dự án Wpf để sử dụng AnyCPU để nó được xây dựng trước tiên. Tại thời điểm này, dự án wix đã sử dụng cấu hình chính xác và dự án Wpf đã sử dụng hương vị với AnyCPU. Tuy nhiên, làm như vậy dường như không thay đổi bất cứ điều gì.

Tôi đang sử dụng RTM Tfs2010, RT2 Vs2010 và phiên bản Wix mới nhất, tại thời điểm viết bài này là 3.5.1602.0, từ 2010-04-02. Bất cứ ai khác chạy vào điều này?

2010-04-27: Sau một số tiền hợp lý đào, và tái tạo trên máy tạo bản sao VM, tôi tin rằng tôi biết điều gì đang xảy ra và những gì không thành công, nhưng tôi không biết cách khắc phục nó.

Tình huống là lỗi này dường như biểu hiện các triệu chứng dựa trên thứ tự dự án may mắn rút thăm trúng thưởng trong tệp giải pháp. Nó xuất hiện như thể các tập tin giải pháp sẽ chỉ mù quáng xây dựng các dự án theo thứ tự chúng xuất hiện, dựa vào khả năng của nó để phát hiện tài liệu tham khảo chưa xây dựng và xây dựng chúng theo yêu cầu khi cần thiết.

Trong tệp giải pháp cụ thể của tôi, dự án Wix của tôi đã được đặt hàng trước dự án ứng dụng Wpf của tôi. Điều này dẫn đến dự án Wix được xây dựng đầu tiên, và trong khi sự phụ thuộc vào dự án Wpf đã được phát hiện đúng, nhiệm vụ MSBuild thực sự bị bỏ qua vì biến $ (BuildProjectReferences) không xác định, tôi đề cập đến một vài nhận xét từ bài chính trong chủ đề. Với độ chính xác MSBuild vẫn còn trên chẩn đoán, BuildProjectReferences có thể được xem là không xác định xây dựng dự án Wix, và nó có thể được xem là đúng khi xây dựng dự án Wpf trong nhiệm vụ để xây dựng dự án Wix. Tuy nhiên, khi được kiểm tra, nó đánh giá không xác định một lần nữa, nhiệm vụ được bỏ qua, và xây dựng Wix không thành công vì nó không thể tìm thấy đầu ra xây dựng của dự án Wpf chưa xây dựng.

Vì vậy, dòng dưới cùng: phụ thuộc dự án bị bỏ qua vì biến $ (BuildProjectReferences) không hợp lệ. Điều thú vị là biến này chỉ xuất hiện trong tệp Wix2010.targets chứ không phải trong wix.targets; Tôi đoán đó là lý do tại sao điều này chỉ hiển thị sau khi tôi cài đặt Tfs2010 và Vs2010.

Giải pháp: Làm cách nào để đảm bảo rằng BuildProjectReferences được truyền chính xác cho các tác vụ MSBuild tiếp theo? Có điều gì đặc biệt với phạm vi biến xảy ra không?

2010-09-14: Đã xảy ra lỗi cho sự cố này trong bộ công cụ WiX: http://sourceforge.net/tracker/?func=detail&atid=642714&aid=2990231&group_id=105970 và được khắc phục cách đây một thời gian. Hy vọng rằng, đây không còn là vấn đề nữa. Nếu có, vui lòng mở một lỗi mới.


Để giải quyết trực tiếp nhận xét của bạn, không có gì trong giải pháp của tôi có cấu hình AnyCPU trong tệp xây dựng của họ.Tôi đã tạo cấu hình AnyCPU chỉ để kiểm tra giải pháp được đề xuất bởi chuỗi tôi đã liên kết trong bài đăng gốc của mình. Sau khi không hoạt động, tôi đã xóa lại cấu hình AnyCPU.

Hơn nữa, các dự án nằm trong cùng một tệp giải pháp, tuy nhiên trong các thư mục giải pháp riêng biệt (thư mục giao diện, thư mục trình cài đặt) nếu điều đó quan trọng.

Điều thú vị là tôi sẽ tạo một ví dụ sandbox nhỏ để tôi có thể minh họa cho vấn đề tôi gặp phải, tuy nhiên sau khi tạo giải pháp mẫu nhỏ bé của tôi, tôi không thể tạo lỗi. Điều này làm cho tôi nghĩ rằng có lẽ đây là kết quả của việc sử dụng một dự án nhóm đã được nâng cấp từ một dự án nhóm Tfs2008 chứ không phải là một dự án đã được tạo mới trong Tfs2010. Tôi có thể thử phân nhánh dự án của tôi thành một dự án mới để kiểm tra lý thuyết này nếu tôi không thể tìm ra lý do giải pháp thử nghiệm hoạt động.

p.s. Ngoài ra, tôi mới để stackoverflow - tại sao trên trái đất là ý kiến ​​giới hạn về chiều dài nếu "câu trả lời câu hỏi của riêng bạn" công việc chỉ nhằm cung cấp các câu trả lời cụ thể?


Vì vậy, tôi đã ném xây dựng tính cách rườm rà lên đến chẩn đoán và đọc qua nó ngày hôm nay, và một dòng đặc biệt nổi bật với tôi:

Task "MSBuild" skipped, due to false condition; ('@(_ProjectReferenceWithConfiguration)'!='' and '$(BuildingInsideVisualStudio)' != 'true' and '$(BuildProjectReferences)' == 'true' and '@(_MSBuildProjectReferenceExistent)' != '') was evaluated as ('..\WpfApp\WpfApp.csproj'!='' and '' != 'true' and '' == 'true' and '..\WpfApp\WpfApp.csproj' != ''). 

Đây được xem là dự án trình cài đặt của tôi đã cố gắng để xây dựng dự án wpf của tôi kể từ khi dự án wpf được tham chiếu. Đặc biệt, đối với một số lý do $ (BuildProjectReferences) được đánh giá là '' khi tôi khá chắc chắn nó phải là 'true'.

Tuy nhiên trước đó trong nhật ký, vào lúc bắt đầu của nhiệm vụ MSBuild cho dự án WpfApp, tôi thấy điều này:

Task "MSBuild" (TaskId:15) 
... 
Initial Properties: 
... 
BuildProjectReferences = true 

Vì vậy, bất động sản đã thực sự sửa cho đến khi bắt đầu công việc, nhưng sau đó đã dường như bị ghi đè? Tôi không biết làm thế nào các thuộc tính này được thiết lập.

+0

Tôi đang gặp sự cố tương tự, chưa thể giải quyết được. –

+0

Tôi đã thực hiện một số nghiên cứu. Việc tạo lại giải pháp từ đầu dường như hoạt động, tôi nghĩ rằng nó có thể liên quan đến các dự án đặt hàng được thêm vào giải pháp. Đây là suy đoán thuần túy ... –

+0

chỉnh sửa mô tả vấn đề ban đầu với nhiều thông tin hơn. – bwerks

Trả lời

4

Theo sau chỉnh sửa của Rob Mensching về bài đăng gốc của tôi, có vẻ như điều này thực sự đã được khắc phục trong WiX 3.6.0917.0 chậm nhất.

1

TFS sử dụng bộ thuộc tính để kiểm soát tên của các giải pháp và cấu hình để xây dựng (lặp qua). Đối với mỗi kết hợp của giải pháp và cấu hình, nó sử dụng các phụ thuộc của dự án/thứ tự xây dựng để kiểm soát thứ tự của các dự án được xây dựng. Có thể EXE/DLL của bạn là AnyCPU và rằng WiX của bạn là x86 và mặc dù WiX có một sự phụ thuộc vào EXE/DLL x86 được xây dựng trước AnyCPU của bạn. Hoặc có thể họ thậm chí là trong các giải pháp khác nhau vì vậy nó là loại khó để nói mà không cần nhìn vào nguồn của bạn, nhưng đó là cơ bản như thế nào nó hoạt động.

16

Lỗi của nó, lỗi, lỗi. Dunno người chịu trách nhiệm, nhưng đây là một hoạt động bẩn thỉu bẩn thỉu:

  1. Mở tệp .sln của bạn trong notepad.
  2. Tìm các dự án wix của bạn trong danh sách các dự án.
  3. Cắt chúng ra và dán lại sau khi tất cả các dự án khác được liệt kê.
  4. Khóc tắm khi bạn cố gắng lau sạch bụi bẩn, chỉ xuất hiện vài giờ sau đó, cọ xát thô và vẫn còn với mùi hôi thối của chất bẩn bám vào bạn như da của xác chết.
+0

Vâng, tôi đã tự mình tìm ra giải pháp này để cố gắng đưa ra một kịch bản sinh sản đơn giản (mục đích thực sự là đăng mã lên SO ở đây), mặc dù tôi ngần ngại gọi nó là một giải pháp. "Ồ, vậy tất cả các dự án khác mà tôi phụ thuộc vào * xảy ra * sẽ được xây dựng? Faaabulous!" Vâng, điều đó hoàn toàn vô cùng. Tuy nhiên, đây là phản ứng tốt nhất tôi đã nhận được trên trang web này cho đến nay, hah. – bwerks

+0

Cảm ơn vì giải pháp này. –

+0

@Nó rất kỳ quặc, tôi chỉ phải học lại cái hack bẩn thỉu này khi tôi gặp phải lỗi tương tự với một giải pháp khác. Một lần nữa và tôi sẽ hạ nó xuống. – Will

1

Điều chúng tôi đã làm trước tiên là report the bug to wix và sau đó chúng tôi đã tìm thấy câu hỏi của bạn.

Chúng tôi đã giải quyết vấn đề về phía chúng tôi bằng cách nói rằng, theo mặc định, dự án wix sẽ xây dựng các tham chiếu. Chúng tôi đã cập nhật tệp C: \ Program Files \ MSBuild \ Microsoft \ WiX \ v3.5 \ wix2010.mục tiêu bằng cách thiết lập <BuildProjectReferences>True</BuildProjectReferences> trong dự án thiết lập đường dẫn. Vì vậy, có, chúng tôi đã làm điều này bằng tay; chúng tôi đã báo cáo lỗi cũng như bản sửa lỗi của chúng tôi.

3

Tôi đã gặp sự cố này (wix 3.7 không tìm thấy đầu ra dự án phụ thuộc) trong bản dựng cục bộ và TFS của tôi (cho cả VS2010 và VS2012).

Cuối cùng tôi đã thu xếp nó bằng cách đặt thuộc tính msbuild /m:1 để chỉ sử dụng một quy trình xây dựng đơn lẻ. Tôi đặt /m để cho phép msbuild biết được có bao nhiêu quá trình có thể sử dụng để đồng thời xây dựng cùng.

+1

Không phải là giải pháp tốt nhất (vì tôi muốn theo dõi lỗi), tuy nhiên, giải pháp hợp lệ duy nhất tôi gặp phải. TFS2013/wix3.8 có cùng một vấn đề, và điều này đã giúp. –

+0

ps quên thêm: được duyệt diễn đàn nhiều giờ, hai chủ đề có thể đã được lifesavers của tôi, nhưng họ đã không: http://blogs.msdn.com/b/msbuild/archive/2010/12/21/incorrect -solution-build-ordering-when-using-msbuild-exe.aspx? CommentPosted = true # commentmessage và http://social.msdn.microsoft.com/Forums/vstudio/en-US/dc5b35a3-655f-4329-8da4 -50f21153a9a2/prebuild-event-xuất hiện-to-run-at-the-sai-thời gian? Diễn đàn = tfsbuild –

0

tôi phải đối mặt với một vấn đề tương tự hôm nay và tìm một giải pháp như thế này:

Mở tập tin giải pháp của bạn vào notepad các tìm thấy dự án thiết lập của bạn và thay đổi cài đặt postProject. Điều này sẽ cho msbuild biết dự án này nên đợi một dự án khác để xây dựng. Tôi không biết tại sao nhưng nó không được thêm vào theo mặc định.

Project("{GUID}") = "MyInstaller", "MyInstallerPath", "{Installer Project GUID}" ProjectSection(ProjectDependencies) = postProject {Prebuild Project GUID} = {Prebuild Project GUID} EndProjectSection EndProject

'prebuild Dự án GUID' là số trên bên phải của dự án mà bạn muốn cài đặt.

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