Можно ли использовать две оболочки (x86 и x64) в одном приложении AnyCPU? - PullRequest
2 голосов
/ 03 августа 2010

Есть ли какое-либо решение проблемы развертывания одного приложения, скомпилированного с целевой платформой в виде AnyCPU, которое использует оболочку .NET устаревшего кода C ++ для операционных систем x86 и x64?Нужно ли вам во всех случаях предоставлять два исполняемых файла приложения, один из которых был скомпилирован с целевой платформой x86, а другой - с x64 соответственно со ссылкой на оболочку x86 и оболочку x64?

Спасибо!

1 Ответ

1 голос
/ 30 декабря 2010

Я использую приложение запуска, которое будет тестировать ОС и перемещаться по библиотекам DLL, чтобы во время выполнения использовались правильные библиотеки DLL (используйте библиотеки x86 в 32-битных ОС и т. Д.). Логика в лаунчере довольно проста. Что-то вроде:

If IntPtr.Size = 8 Then
  '-- Copy x64 DLLs into position
Else
  '-- Copy x86 DLLs into position
End If

Конечно, при копировании вам нужно копировать обратно, чтобы вы всегда могли переключаться между x64 и x86 (в случае переносимого приложения). Тем не менее, если вы устанавливаете непереносимое приложение, тогда запускать его не нужно, так как эта проверка ОС может быть выполнена внутри установщика (поэтому устанавливаются только правильные библиотеки DLL). Проекты установки Visual Studio не допускают этого (поскольку вы не можете смешивать компоненты x64 и x86 в одном установщике), но InstallShield разрешает это (это то, что я использую).

Вам нужно будет отредактировать файл проекта, чтобы использовать неспецифическую версию рассматриваемых библиотек DLL (в противном случае это перемещение и логика условной установки не будут выполнять то, что вам нужно).

...