2010-12-26 24 views
5

Tôi hiện đang ở trong tình huống mà tôi có cả máy phát triển 32 bit và 64 bit hoạt động trên dự án C# của tôi. Tôi phải tham khảo một vài dlls có cả một phiên bản 32 bit và 64 bit. Rõ ràng, các máy 32 bit cần tham khảo dll 32 bit và các máy 64 bit là dll 64 bit. Vấn đề tôi gặp phải là mỗi khi nhà phát triển kiểm tra một số mã, họ cũng kiểm tra tài liệu tham khảo dll của họ, vì vậy khi ai đó ở bên kia kéo mã của họ, nó không xây dựng và họ phải cập nhật thủ công tham chiếu của họ trở lại với những gì họ nên làm. Sau đó, họ kiểm tra, và các nhà phát triển khác phải tự sửa chữa tài liệu tham khảo của họ, vv vv quảng cáo nauseum.Phát triển trên cả bộ vi xử lý 32 bit và 64 bit, tôi nên cấu trúc dự án của mình như thế nào để tự động tham khảo các dll phải không?

Tôi không tưởng tượng đây là một vấn đề mới, nhưng đây là lần đầu tiên tôi gặp phải vấn đề này. Có một thực tế phổ biến để có một dự án tự động tham khảo dll chính xác cho CPU? Hoặc có thể là một cách để có một dự án 32 bit và 64 bit, mỗi dự án có tham chiếu chính xác và một cách (có thể là công cụ dòng lệnh hoặc một số bên ngoài có thể được gắn vào bản dựng) để gắn chúng lại với nhau để khi các mục mới thêm vào hoặc gỡ bỏ một, cái kia cũng sẽ được cập nhật?

Tùy chọn khác là để mọi nhà phát triển sử dụng cùng một môi trường phát triển ảo hóa. Nếu tôi đi tuyến đường này, tôi có thể ảo hóa một hệ thống 64 bit trên phần cứng 32 bit hay không, hoặc tôi phải đi theo cách khác và ảo hóa 32 bit. Đây sẽ là một sản phẩm SaaS, vì vậy tôi chỉ phải triển khai cho một bộ xử lý, và tôi muốn nó là 64 bit.

+0

Có vẻ như bạn cần các tệp dự án khác nhau cho các mục tiêu khác nhau –

+0

@ David Heffernan Tôi cũng nghĩ như vậy, nhưng vấn đề mới của tôi là làm cách nào để giữ cho các nhà phát triển không phải cập nhật các mục mã của dự án theo cách thủ công. ? –

+0

@Matthew Vines làm thế nào về một tack khác nhau, tại sao các DLL được tham chiếu cần phải có tên khác nhau? Nếu bạn được quản lý 100%, bạn có thể khiến mọi thứ trở thành mục tiêu của AnyCPU không? –

Trả lời

6

Ở đây bạn tìm thấy một ví dụ về cách thay đổi các tài liệu tham khảo lắp ráp theo nền tảng mục tiêu của bạn:

http://www.ryangerard.net/post/8768828095/how-to-change-visual-studio-assembly-references

(Bạn cần phải thay đổi các tập tin csproj thủ công). Và đừng quên, trên các máy 32 bit chọn 'x86' làm nền tảng đích, trong khi trên máy 64 bit, chọn 'x64').

+1

Cảm ơn bạn đã liên kết. Đây chính xác là vấn đề tôi đang gặp phải và chính xác những gì tôi đang tìm kiếm. Tôi sẽ cung cấp cho nó một phát bắn vào thứ hai và cho bạn biết nó hoạt động như thế nào cho chúng tôi. –

2

Tôi có vấn đề tương tự nhưng giải pháp của tôi hơi khác một chút. Tôi chỉ đơn giản là có tất cả các nhà phát triển phát triển với các DLL x86.

Vì vậy, mã thực sự giống nhau trên tất cả các máy. Sau đó, tại thời gian chạy (và để thử nghiệm), tôi sử dụng một ứng dụng launcher sẽ kiểm tra hệ điều hành và di chuyển xung quanh các tệp DLL sao cho thời gian chạy các DLL thích hợp được sử dụng. Logic trong trình khởi chạy khá đơn giản. Một cái gì đó như:

If IntPtr.Size = 8 Then 
    '-- Copy x64 DLLs into position 
Else 
    '-- Copy x86 DLLs into position 
End If 

Tất nhiên, khi sao chép, bạn cần sao chép lại để luôn có thể chuyển đổi giữa x64 và x86 (trong trường hợp ứng dụng di động). Tuy nhiên, nếu bạn đang cài đặt một ứng dụng không di động thì không cần cho trình khởi chạy vì kiểm tra hệ điều hành này có thể được thực hiện bên trong trình cài đặt (do đó chỉ có các DLL thích hợp mới được cài đặt).

Bạn sẽ cần phải chỉnh sửa tệp dự án của mình để sử dụng phiên bản không cụ thể của các tệp DLL được đề cập (nếu không, điều này sẽ không làm những gì bạn muốn).

1

Tôi đang thực hiện một tác vụ tương tự. Giải pháp của tôi là sử dụng các sự kiện pre-buld và các thư mục tài nguyên cụ thể. Các tài liệu tham khảo 32 bit của tôi đã đi vào một thư mục, và 64 bit trong một thư mục khác.

del "$ (ProjectDir) \ dlls *.dll" - xóa tất cả các file dll từ thư mục nguồn tài nguyên chung

xcopy "$ (ProjectDir) \ CommonResources" "$ (ProjectDir) \ dlls"/ s/i/y - Sao chép dlls chung vào thư mục tài nguyên

Hai lệnh sau sao chép đúng 32 hoặc 64bit dll vào thư mục tài nguyên

nếu $ (Tên nền tảng) == x64 (xcopy "$ (ProjectDir) \ dlls-64 \ My64Bit.dll" $ (ProjectDir) \ dlls/s/i/y)

nếu $ (PLATFORMNAME) == x86 (xcopy "$ (ProjectDir) \ dlls-32 \ My32Bit.dll" $ (ProjectDir) \ dlls/s/i/y)

Sử dụng các lệnh tương tự cho việc xây dựng bài đăng, tôi yêu cầu các tham chiếu đến thư mục đầu ra để đóng gói.

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