2009-07-10 11 views
7

Opracowaliśmy aplikację C# z wykorzystaniem platformy .NET Framework 2.0, która działa dobrze na komputerach 32-bitowych. Ale kiedy uruchamiam moją aplikację w środowisku 64-bitowym, ulega awarii.Jak uruchomić 32-bitową aplikację .NET w środowisku 64-bitowym?

Muszę sprawić, aby moja aplikacja działała w środowisku 64-bitowym.

Jak to zrobić?

+2

Musimy będzie raczej więcej informacji niż to. Czy używa P/Invoke? Czy wyizolowałeś go do określonego obszaru kodu? –

Odpowiedz

0

Powinien zostać uruchomiony, chyba że odwołujesz się do bibliotek, które są specjalnie dostępne tylko dla 32-bitowych (np. Sterowniki Jet DB) lub dopóki nie powiesz kompilatorowi, aby skompilował aplikację tylko do wersji 32-bitowej.

Co oznacza błąd?

+1

Jeśli kompilator ma się kompilować do wersji 32-bitowej, to faktycznie * powinien * działać, i jest w rzeczywistości prawdopodobnie akceptowalną poprawką dla problemu. – harms

4

W ustawieniach kompilacji dla ciebie ustaw platformę docelową na x86 zamiast Dowolnego procesora. To rozwiąże problemy, w których twój projekt ma "ukryte" zależności w 32-bitowych podsystemach, które nie są dostępne w 64-bitowym. Twoja aplikacja zostanie uruchomiona w 32-bitowym susbsystem w 64-bitowym systemie Windows.

9

Można skompilować go dla x86 zamiast dowolnego procesora, w ten sposób będzie działał na 32-bitowych bibliotekach w 64-bitowych oknach.

Lub zamień 32bitowe biblioteki na 64bit podczas instalacji w 64-bitowych oknach. Między innymi niektóre biblioteki Sqlite są specyficzne dla 32/64 bitów

+0

+1 To proste rozwiązanie zaoszczędziło mi konieczności jednoczesnego wspierania kompilacji x86 i x64! Chciałbym móc wielokrotnie głosować !! –

1

Miałem do czynienia z tym samym problemem. W moim przypadku wystarczyło skompilować główny zbiór (.exe) mojej aplikacji specjalnie dla "x86". Pozostałe zespoły (.dll) są kompilowane przy pomocy "Any CPU".

Nasza aplikacja działa poprawnie na systemach 32Bit i 64Bit.

0

Czy to jest aplikacja Windows/ASP.NET?

Jeśli jest to aplikacja ASP.NET. możesz uruchamiać tylko tryby 32/64-bitowe w tym samym czasie. W tym celu:

Przypadek 1. Należy uzyskać Enable32bitApplication w puli aplikacji w IIS. Następnie zresetuj IIS.

Przypadek 2. Sprawdź, czy odpowiadająca biblioteka DLL w regedit.

Jeśli jest oparte na systemie Windows, należy uruchomić z wiersza polecenia programu Visual Studio,

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

Oto, co wydaje się być miłym rozwiązaniem, jeśli szukasz, aby uniknąć ponownej kompilacji. Zauważ, że wymaga to zmiany na każdym komputerze docelowym.

Jeśli masz komputer 64-bitowy i chcemy uruchomić aplikację .NET że działa tylko z 32 bitowym CLR trzeba by dokonać zmian w ramach .NET na komputerze

Set .NET załadować CLR w trybie WOW przez ten polecenia

otworzyć wiersz polecenia i wpisz polecenie

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

Teraz powinieneś być w stanie uruchamiać aplikacje korzystające tylko z 32-bitowego środowiska CLR .NET.

powrócić do standardowego 64 bitów uruchomienia ramowej

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

(source)

2

Właśnie rozwijając powyższą odpowiedź Fredrika Leijon, myślę, że właśnie o to prosisz.

Pokaże, aby zarówno 64- jak i 32-bitowe okna uruchamiały aplikację w 32-bitowym środowisku.

Pamiętaj, aby zrobić to samo dla konfiguracji "Release".

enter image description here

To z kolei zaktualizować .csproj plik * dla MSBuild odebrać w następujący sposób (sprawdź element <PlatformTarget/> poniżej):

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
<OutputPath>bin\Debug\</OutputPath> 
<ErrorReport>prompt</ErrorReport> 
<WarningLevel>4</WarningLevel> 
<PlatformTarget>x86</PlatformTarget> 
</PropertyGroup> 
Powiązane problemy