Приносим извинения, если что-то из того, что я собираюсь сказать, не имеет смысла или упускает из виду что-то очевидное - мои знания о внутреннем устройстве CLR нечеткие.
Если я правильно понимаю, то если я просто создам решение для AnyCPU в VS2K5 (или укажу MSBuild на этот файл .sln с этими настройками), то двоичные файлы будут компилироваться только до MSIL. Затем они переводятся в 32-битный режим, если он выполняется на 32-битной платформе, или 64-битный код, если выполняется на x64 ... верно?
Библиотеки DLL используются для веб-приложения и размещаются в процессе W3WP.exe. Обозреватель процессов сообщает мне, что W3WP - это 64-разрядный процесс.
Но когда я использую Process Explorer для проверки свойств одной из этих DLL в представлении DLL, он говорит: «Image: 32-bit». Что дает?
Если я запускаю corflags для рассматриваемой dll, он сообщает мне: ILONLY 1, 32BIT 0, но PE PE32. Насколько я понимаю, это означает, что да, он скомпилирован только на уровне IL, нет, он не ограничен 32-битным или 64-битным, но я не совсем понимаю. Имеет ли отношение флаг PE32 к тому, что он отображается как 32-битный, как указано выше?





They then get JITted to 32-bit if executed on a 32-bit platform or 64-bit code if executed on x64...right?
Правильно, вы можете проверить, выполнив тот же exe, скомпилированный для AnyCPU:
sizeof (IntPtr) == 4 // правда на 32 бит
sizeof (IntPtr) == 8 // верно на 64-битной
Но если на вашу сборку ссылаются в процессе, скомпилированном только для 32-разрядной платформы, она будет переведена на 32-разрядную версию (запускается в WOW для 64-разрядной Windows).
Ваш вопрос связан с этот вопрос. В проводнике процессов вы видите тип изображения, который отличается от типа «совместимости во время выполнения», указанного в Corflags сборки.
Смысл установки «Any Cpu» состоит в том, чтобы установить наиболее общий знаменатель как в образе в машинном коде, так и в сборке, чтобы он позволял загрузчику Windows для .NET выбирать, какой тип среды выполнения будет наиболее подходящим для текущей платформы.
Итак, для вашего примера у вас есть 32-битный образ (как указано в заголовке PE), содержащий сборку «Любой процессор» (как указано в CorFlags для сборки).
спасибо :) есть идеи, почему Process Explorer злится?