2009-07-10 105 views
7

Chúng tôi đã phát triển ứng dụng C# bằng .NET Framework 2.0 hoạt động tốt trong các máy tính 32 bit. Nhưng khi tôi chạy ứng dụng của mình trong môi trường 64-bit, nó bị treo.Cách chạy ứng dụng .NET 32 bit trong môi trường 64 bit?

Tôi cần làm cho ứng dụng của mình chạy trong môi trường 64 bit.

Làm cách nào để thực hiện việc này?

+2

Chúng tôi sẽ cần khá nhiều thông tin hơn đó. Nó có sử dụng P/Invoke không? Bạn đã cô lập nó vào một khu vực cụ thể của mã? –

Trả lời

0

Nó chỉ chạy trừ khi bạn đang tham khảo thư viện chỉ dành riêng cho 32bit (trình điều khiển Jet DB là một ví dụ) hoặc trừ khi bạn đã nói trình biên dịch của bạn để biên dịch ứng dụng của bạn thành 32 bit.

Tai nạn nói gì?

+1

Nếu trình biên dịch được yêu cầu biên dịch thành chỉ 32 bit, thì thực tế nó * nên * hoạt động và trên thực tế có thể là sự khắc phục có thể chấp nhận được cho sự cố. – harms

4

Trong các thiết lập xây dựng cho bạn dự án đặt mục tiêu nền tảng thành x86 thay vì CPU bất kỳ. Điều này sẽ giải quyết các vấn đề mà dự án của bạn có phụ thuộc "ẩn" trên các hệ thống phụ 32 bit không có sẵn trong 64 bit. Ứng dụng của bạn sau đó sẽ chạy trong hệ thống susbystem 32 bit trên Windows 64 bit.

9

Bạn có thể biên dịch nó cho x86 thay vì bất kỳ cpu theo cách đó nó sẽ chạy đối với thư viện 32 bit trên một cửa sổ 64bit.

Hoặc trao đổi thư viện 32 bit cho 64 bit khi cài đặt trên cửa sổ 64 bit. Trong số một số khác Sqlite dlls là cụ thể cho 32/64 bit

+0

+1 Giải pháp đơn giản này giúp tôi có được hỗ trợ x86 và x64 song song! Ước gì tôi có thể upvote nhiều lần !! –

1

Tôi phải đối mặt với cùng một vấn đề. Tôi trường hợp của tôi nó đã đủ để biên dịch lắp ráp chính (.exe) của ứng dụng của tôi đặc biệt là cho "x86". Các assembly khác (.dll) được biên dịch với "Any CPU".

Ứng dụng của chúng tôi sau đó hoạt động tốt trên các hệ thống 32Bit và 64Bit.

5

Nếu bạn sử dụng Windows, bạn phải sử dụng CorFlags Công cụ chuyển đổi (CorFlags.exe). Bằng cách này, bạn có thể thực thi ứng dụng/dll để chạy trong không gian 32/64 bit. Chi tiết và ví dụ về sử dụng có sẵn tại http://msdn.microsoft.com/en-us/library/ms164699(VS.80).aspx.

0

Ứng dụng Windows/ASP.NET phải không?

Nếu đó là ứng dụng ASP.NET. bạn chỉ có thể chạy các chế độ 32/64 bit cùng một lúc. Để thực hiện việc này,

Trường hợp 1. bạn cần phải Enable32bitApplication trên hồ bơi ứng dụng trong IIS. Sau đó đặt lại IIS.

Trường hợp 2. Kiểm tra tệp DLL tương ứng trong regedit.

Nếu đó là cửa sổ dựa, chạy lệnh này từ Visual Studio nhanh chóng,

CorFlags.exe TheApp.exe /32BIT+ //Enables 32 bit application. 
4

Đây là những gì có vẻ là một giải pháp tốt đẹp nếu bạn đang tìm kiếm để tránh biên dịch lại. Lưu ý rằng nó đòi hỏi một sự thay đổi cho mỗi máy mục tiêu.

Nếu bạn có một máy 64 bit và muốn chạy một ứng dụng .NET chỉ làm việc với CLR 32 bit bạn sẽ phải thay đổi các khuôn khổ NET trên máy tính của bạn

Set các .NET framework để tải CLR trong WOW chế độ thông qua lệnh này

Mở cửa sổ lệnh và gõ lệnh này

C: \ WINDOWS \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Ldr64.exe SetWow

Bây giờ bạn sẽ có thể chạy các ứng dụng chỉ sử dụng CLR .NET 32 bit.

Để quay trở lại mặc định 64 bit khuôn khổ chạy

C: \ WINDOWS \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Ldr64.exe Set64

(source)

2

Chỉ cần mở rộng câu trả lời của Fredrik Leijon ở trên, tôi nghĩ rằng đây là những gì bạn đang sau.

Nó sẽ cho cả cửa sổ 64 và 32 bit chạy ứng dụng của bạn trên môi trường 32 bit.

Hãy nhớ làm như vậy đối với cấu hình 'Phát hành' của bạn.

enter image description here

Điều này sẽ lần lượt cập nhật * file csproj của bạn cho MSBuild nhặt như sau (kiểm tra các yếu tố <PlatformTarget/> dưới đây):

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
<OutputPath>bin\Debug\</OutputPath> 
<ErrorReport>prompt</ErrorReport> 
<WarningLevel>4</WarningLevel> 
<PlatformTarget>x86</PlatformTarget> 
</PropertyGroup> 
Các vấn đề liên quan