2013-04-01 30 views
6

Tôi đang sử dụng Visual Studio 2010 để xây dựng dự án C# có cả mục tiêu x86 và x64. Khi tôi xây dựng bằng cách sử dụng IDE, tôi nhận được kết quả chính xác của các mục tiêu x64 và x86.xây dựng dự án x64 C# với kết quả msbuild trong mục tiêu 32bit

Khi tôi sử dụng msbuild trên dòng lệnh, tôi nhận mọi thứ được xây dựng trong x86, mặc dù tôi chỉ định x64 trên dòng lệnh.

Tôi không gặp vấn đề này cho đến khi tôi nâng cấp từ .Net 4.0 lên .Net 4.5.

Với .Net 4.0 Tôi đã có thể nhận được các mục tiêu x64 của mình ngay cả khi tôi đã chỉ định x86 trên dòng lệnh.

Tôi đã tạo bản dựng trong môi trường .Net 4.0 và sau đó xây dựng một môi trường .Net 4.5 khác và đưa đầu ra vào tệp nhật ký. Tôi nhận thấy một số khác biệt trong các tập tin log nhưng tôi nghĩ rằng đây là những gì đang gây ra vấn đề của tôi:

Trong Net 4.0 Tôi thấy dòng này trong file log:

/tài liệu tham khảo: C: \ Windows \ Microsoft. Net \ assembly \ GAC_MSIL \ Microsoft.CSharp \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ Microsoft.CSharp.dll

In .Net 4.5 Tôi thấy dòng này trong tệp nhật ký: /r: "C: \ Program Files (x86) \ Tham chiếu Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Microsoft.CSharp.dll "

Bất kỳ ý tưởng nào? Nó seams. Net 4.5 đang sử dụng một đường dẫn cụ thể x86.

+1

Bạn sử dụng dòng lệnh nào để chạy msbuild? Bạn có tạo tệp sln hoặc csproj không? Làm thế nào để bạn vượt qua cấu hình cụ thể? – Lanorkin

+0

msbuild project.sln/p: Nền tảng = "x64"/t: Làm sạch; Xây dựng lại/p: Cấu hình = Gỡ lỗi – Tony

+0

Cấu hình có đúng trong dòng này trong phần đầu của nhật ký 'Cấu hình giải pháp xây dựng" Gỡ lỗi | x64 "'? Làm thế nào để bạn hiểu rằng kết quả không chính xác? Các thư mục đầu ra nào được tạo ra - 'bin \ x86 \ Debug' hoặc' bin \ x64 \ Debug'? – Lanorkin

Trả lời

5

Điều này có thể xảy ra nếu cấu hình x64 của giải pháp của bạn được định cấu hình để tạo dự án dưới dạng AnyCPU. Một tùy chọn cấu hình mới trong .Net 4.5, Prefer 32 bit, làm cho các tệp thi hành với cờ Prefer32bit khởi động như các quy trình 32 bit trên máy 64 bit. Vì cờ Prefer32bit là mặc định trong các mục tiêu MSBuild, bạn sẽ thấy hành vi mà bạn mô tả, tức là nâng cấp từ .Net 4.0 lên .Net 4.5 sẽ có dự án AnyCPU của bạn để chuyển đổi từ 64 bit thành 32 bit.

Để thực hiện dự án (không phải giải pháp) xây dựng cho x64, xác định nó trên dòng lệnh:

msbuild project.csproj /p:Platform=x64 

Thông báo, dòng lệnh là cho csproj, không phải cho sln.

Ngoài ra, hãy xác minh cấu hình giải pháp của bạn trong Trình quản lý cấu hình và đảm bảo cấu hình được xây dựng dưới dạng x64.

+1

Cảm ơn! Tôi đã có thể thêm/thuộc tính: Prefer32bit = false vào dòng lệnh msbuild của tôi và có vẻ như nó giải quyết được vấn đề. – Tony

+0

Chuyển đổi nào để sử dụng với msbuild để xây dựng giải pháp lên 64 bit? –

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