Exe консольного приложения Windows x64 C # x86, кажется, работает с "DLL любой ЦП" Есть потенциальная проблема? - PullRequest
3 голосов
/ 21 июля 2010

Мой компьютер работает под управлением Windows 7 X64 Enterprise Edition.Мне нужен режим x86 для моего исполняемого файла, так как я использую драйвер Visual Foxpro OLEDB.Я думал, что это было необходимо для компиляции библиотек DLL, которые используются этим exe-файлом как "X86".Тем не менее, библиотеки DLL, скомпилированные с «Any CPU», похоже, работают, что довольно удобно, поскольку они используются где-то еще и нет необходимости сохранять 2 копии.Просто интересно, как это работает, и я должен продолжать так?

Ответы [ 3 ]

2 голосов
/ 21 июля 2010

Любые библиотеки ЦП JIT будут компилироваться в x86 или x64, если процесс x64 или x86.Пока ваш exe-файл скомпилирован как x86, DLL будет JITed как x86.Если ваш exe был x64, DLL будет JITed как x64.

2 голосов
/ 21 июля 2010

Это нормально. Пока исполняемый файл скомпилирован для x86, любая целевая сборка «Любой ЦП» будет загружаться как x86.

Вы просто не можете загрузить сборку, явно ориентированную на x64, так как это не сработает в 32-битном приложении.

1 голос
/ 21 июля 2010

Решение принимается при загрузке вашего .exe. Флаг 32BIT в заголовке метаданных сборки определяет, загружен ли 32-битный или 64-битный CLR. И, что наиболее важно, JIT-компилятор x86 или x64. После этого JIT-компилятор генерирует правильный вид машинного кода, независимо от разрядности любой из библиотек DLL, которые загружаются позже.

Таким образом, имеет значение только настройка целевой платформы для EXE.

...