2009-04-15 42 views
17

Tôi có một chương trình mà đòi hỏi cả hai x64 và x86 dlls (nó hiểu ra những người thân mà nó cần ít thời gian chạy), nhưng khi cố gắng để tạo ra một thiết lập, nó than phiền:Thiết lập nhắm mục tiêu cả x86 và x64?

file AlphaVSS.WinXP.x64. dll 'targeting' AMD64 'không tương thích với nền tảng mục tiêu của dự án thứ' x86 '
File' AlphaVSS.Win2003.x64.dll 'nhắm mục tiêu' AMD64 'không tương thích với nền tảng mục tiêu của dự án thứ' x86 '
Tệp AlphaVSS.Win2008. x64.dll 'nhắm mục tiêu' AMD64 'không tương thích với nền tảng mục tiêu của dự án thứ' x86 '

Làm cách nào để thiết lập của tôi có thể nhắm mục tiêu cả hai nền tảng như chương trình của tôi?

Trả lời

11

MSI được tạo bởi dự án thiết lập (trong Visual Studio) chỉ có thể nhắm mục tiêu một nền tảng tại một thời điểm. Tùy chọn của bạn là tạo ra 2 MSI, kết hợp chúng lại với nhau và tạo ra một strapper boot setup tùy chỉnh mà chọn giữa hai. Ví dụ: có một số sản phẩm của bên thứ 3, chẳng hạn như Advanced Installer, có thể làm điều này cho bạn.

+9

I không muốn làm điều này ... – Malfist

2

.Net có tùy chọn "Mọi CPU". Thật hấp dẫn khi nghĩ về nó như một tùy chọn "chung chung" sẽ chỉ sử dụng các tính năng x86 ít hơn, nhưng thực sự nó cho phép trình biên dịch JIT trên mỗi máy chọn loại CPU thích hợp cho máy đó.

Thời gian duy nhất bạn không nên sử dụng nó là nếu bạn biết bạn có các phụ thuộc hoặc yêu cầu không tốt cho kiến ​​trúc này hoặc cấu trúc khác. Ví dụ: bạn biết bạn cần một số lot của ram, bạn có một phụ thuộc vào một dll gốc 32 bit hoặc bạn muốn biên dịch trước ứng dụng.

Có nguy cơ ở đây vì bạn có phụ thuộc vào nền tảng dll cụ thể. Nhưng bạn có dlls cho cả hai loại và nó có vẻ như bạn biết làm thế nào để chọn một trong những quyền tại thời gian chạy. Vì vậy, tùy chọn 'CPU bất kỳ' có phù hợp với bạn không?

+0

Dự án của tôi được đặt thành bất kỳ thiết lập nào, tuy nhiên, thiết lập không cho phép tùy chọn đó. Dự án thiết lập thuộc tính TargetPlatform và tôi có tùy chọn x86, x64 và Itanium. Không có gì cả. – Malfist

+0

Hmm .... các dự án thiết lập bao gồm tệp .exe gốc để khởi động cài đặt trong trường hợp .Net chưa có. Đó có thể là yếu tố hạn chế. –

+0

Trong trường hợp đó, bạn có thể thử nghiệm với một dự án thiết lập 32-bit (x86) bao gồm cả hai bộ dll không? Dự án thiết lập vẫn chạy trên các hệ thống x64 và x86 và nếu mọi thứ hoạt động bình thường, bạn vẫn có thể nhận được mã x64 nếu thích hợp. –

5

Tôi chạy vào này quá và wrote a blog post về giải pháp của tôi:

  • deflate file sử dụng deflate.exe, đặt tên nó có phần mở rộng khác nhau (ví dụ .x64)
  • thêm nó vào dự án chính của bạn như một tập tin nội dung
  • thêm một dự án hành động tùy chỉnh để giải pháp của bạn
  • thêm hành động tùy chỉnh cho các dự án thiết lập "cài đặt" hành động tùy chỉnh
  • thổi phồng các tập tin bên trong hành động tùy chỉnh cài đặt tôi Thod sử dụng
  • System.IO.Compression.DeflateStream (xem mã trên)
  • làm một điệu nhảy nhỏ xung quanh bàn làm việc, dọc hành lang, và quá khứ như nhiều đồng nghiệp như bạn quan tâm đến làm phiền :)

Bạn có thể tải xuống tệp deflate.exe từ số repository trên mã google.

+1

Đây là một ý tưởng tuyệt vời và gần đây tôi đã sử dụng nó trong một dự án. Một biến chứng: nếu hành động tùy chỉnh của bạn xóa tệp nén sau khi mở rộng tệp đó (hoặc bạn trích xuất nội dung của tệp zip và sau đó xóa tệp zip) và trình cài đặt của bạn sẽ cài đặt phím tắt. Theo mặc định, các phím tắt được quảng cáo, có nghĩa là khi bạn khởi chạy chúng, hệ thống sẽ kiểm tra xem cài đặt có còn nguyên vẹn hay không và chạy lại trình cài đặt khi tìm thấy tệp nén bị thiếu. Bạn sẽ cần thay đổi tệp msi để các phím tắt không được quảng cáo. –

-2
  1. Mở dự án triển khai.
  2. Trong Solution Explorer, chọn dự án triển khai.
  3. Trong cửa sổ Thuộc tính, hãy chọn thuộc tính TargetPlatform.
  4. Chọn Itanium cho nền tảng Intel Itanium 64 bit hoặc x64 cho bất kỳ nền tảng 64 bit nào khác (chẳng hạn như bộ hướng dẫn AMD64 và EM64T).
  5. Khi cài đặt, lỗi sẽ được nâng lên và quá trình cài đặt sẽ bị tạm dừng nếu máy tính đích không tương thích với nền tảng được chỉ định.
+1

Cách này trả lời câu hỏi? – etaiso

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