Co oznacza cel Visual Studio "dowolny procesor"?

Mam pewne zamieszanie związane z opcjami budowania Platformy. NET w Visual Studio 2008.

Jaki jest cel kompilacji "dowolnego procesora" i jakie pliki generuje? Zbadałem wyjściowy plik wykonywalny tej kompilacji "dowolnego procesora" i stwierdziłem, że są to pliki wykonywalne x86 (kto by się tego nie spodziewał!). Czy jest jakaś różnica między celowaniem wykonywalnym do x86 A "dowolnym CPU"?

Kolejną rzeczą, którą zauważyłem, jest to, że zarządzane projekty C++ nie mają tego Platforma jako opcja. Dlaczego? Czy to znaczy, że moje podejrzenie, że "każdy procesor" jest zwykłym 32-bitowym, jest słuszne?

Author: iliketocode, 2009-02-05

8 answers

An anycpu assembly będzie JIT do 64-bitowego kodu po załadowaniu do 64-bitowego procesu i 32-bitowego po załadowaniu do 32-bitowego procesu.

Ograniczając procesor można by powiedzieć: jest coś, co jest używane przez Zgromadzenie (coś prawdopodobnie niezarządzanego), które wymaga 32 bitów lub 64 bitów.

 340
Author: AnthonyWJones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-03 13:49:35

Myślę, że większość ważnych rzeczy zostało powiedziane, ale pomyślałem, że dodam jedną rzecz: jeśli skompilujesz jako dowolny procesor i uruchomisz na platformie x64, to nie będziesz w stanie załadować 32-bitowych bibliotek DLL, ponieważ Twoja aplikacja nie została uruchomiona w WOW64, ale te biblioteki DLL muszą tam działać.
Jeśli skompilujesz jako x86, system x64 uruchomi Ci aplikację w WOW64 i będziesz mógł załadować 32-bitowe biblioteki DLL.
więc myślę, że powinieneś wybrać "dowolny procesor", jeśli Twoje zależności mogą działać w obu środowiskach, ale wybierz x86, jeśli masz 32-bitowe zależności. Ten artykuł od Microsoft wyjaśnia to trochę:

/CLRIMAGETYPE (Określ typ obrazu CLR)

Nawiasem mówiąc, ta inna dokumentacja Microsoftu zgadza się, że x86 jest zwykle bardziej przenośnym wyborem:

Wybór x86 jest generalnie najbezpieczniejszą konfiguracją dla pakietu aplikacji ponieważ będzie działać na prawie każdym urządzeniu. Na niektórych urządzeniach aplikacja pakiet z konfiguracją x86 nie będzie działał, np. Xbox czy jakis Urządzenia IoT Core. Jednak w przypadku komputera PC pakiet x86 jest najbezpieczniejszy wybór i ma największy zasięg wdrażania urządzeń. Znaczny część urządzeń z systemem Windows 10 nadal działa w wersji x86 Okna.

 271
Author: Paul A Jungwirth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-16 20:45:45

Oto Szybki przegląd , który wyjaśnia różne cele budowania.

Z własnego doświadczenia, jeśli chcesz zbudować projekt, który będzie działał zarówno na platformach x86, jak i x64, a nie masz żadnych konkretnych optymalizacji x64, zmieniłbym kompilację na konkretnie " x86."

Powodem tego jest to, że czasami można uzyskać kilka bibliotek DLL, które zderzają się lub jakiś kod, który kończy się awarią WOW w środowisku x64. Konkretnie określając x86, system operacyjny x64 będzie traktował aplikacja jako czysta aplikacja x86 i upewnij się, że wszystko działa płynnie.

 50
Author: Dillie-O,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-04 19:42:32

Zobacz artykuł Visual Studio. NET Platform Target wyjaśnione.

Domyślne ustawienie, "dowolny procesor", oznacza, że zespół będzie działał natywnie na procesorze, na którym jest aktualnie uruchomiony. To znaczy, będzie działać jako 64-bit na maszynie 64-bitowej i 32-bitowej na maszynie 32-bitowej. Jeśli assembly jest wywoływany z aplikacji 64-bitowej, będzie działał jako 64-bitowy montaż i tak dalej.

Powyższy link został zgłoszony jako uszkodzony, więc oto kolejny artykuł z podobnym wyjaśnieniem: co tak naprawdę oznacza AnyCPU od. NET 4.5 i Visual Studio 11

 44
Author: NYSystemsAnalyst,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-11 13:41:07

"dowolny procesor" oznacza, że po uruchomieniu programu,. NET Framework zorientuje się, na podstawie bitowości systemu operacyjnego, czy uruchomić program w 32 bitach czy 64 bitach.

Istnieje różnica pomiędzy x86 a dowolnym procesorem: w systemie x64, Twój plik wykonywalny skompilowany dla X86 będzie działał jako 32-bitowy.

Jeśli chodzi o twoje podejrzenia, po prostu przejdź do Wiersza poleceń Visual Studio 2008 i uruchom następujące polecenie.

dumpbin YourProgram.exe /headers

To powie Ci o bitności twojego program, plus dużo więcej.

 39
Author: AngryHacker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-07 21:33:02

Dowolny procesor oznacza, że będzie działał na dowolnej platformie. Dzieje się tak dlatego, że zarządzany kod jest podobny do Javy. Pomyśl o tym jako o kompilacji do kodu bajtowego, który jest interpretowany przez. Net Framework w czasie wykonywania.

C++ nie ma tej opcji, ponieważ jest skompilowany do kodu maszynowego, który jest specyficzny dla platformy.

 31
Author: Adam Tegen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-05 17:16:11

Kredyt na książkę "CLR via C#", zobacz to:

Https://books.google.co.uk/books?id=36tCAwAAQBAJ&pg=PT38

Tutaj wpisz opis obrazka

 22
Author: Ivan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-20 14:35:57

Polecam przeczytać ten post .

Podczas używania AnyCPU semantyka jest następująca:

  • jeśli proces działa na 32-bitowym systemie Windows, działa jako 32-bitowy proces. IL jest kompilowany do kodu maszynowego x86.
  • jeśli proces działa na 64-bitowym systemie Windows, działa jako proces 32-bitowy. IL jest kompilowany do kodu maszynowego x86.
  • jeśli proces działa na systemie ARM Windows, działa jako 32-bitowy proces. IL jest skompilowany do maszyny ARM kod.
 4
Author: mamczas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-07 05:55:55