Может ли приложение WinForms быть настроено для работы в качестве & # 8220; x86 & # 8221; без перекомпиляции?
-
06-07-2019 - |
Вопрос
Может ли приложение WinForms скомпилировано для "любого процессора"? быть настроенным для запуска как "x86" на 64-битном сервере без перекомпиляции приложения? В частности, я ищу параметр app.config или апплет панели управления для достижения этой цели. Все клиенты клиента - x86, но сервер - x64, и нам нравится устанавливать приложение WinForms на сервере, чтобы администраторы могли настраивать и контролировать систему. Мы бы предпочли не перекомпилировать только для сервера.
Решение
С http: // www.request-response.com/blog/PermaLink,guid,34966ef8-3142-46b2-84e0-372b5c36ddcc.aspx р>
Однако вы можете контролировать и переопределить это поведение по умолчанию даже после того, как ваш код был скомпилирован. Есть удобный инструмент под названием Corflags.exe присутствует в SDK, который позволяет принудительно скомпилировать 'anycpu' код для использования 32-битного процесса в 64-битном мир.
Об использовании этой утилиты можно узнать здесь http: //msdn.microsoft.com/en-us/library/ms164699(VS.80).aspx р>
Другие советы
Конфигурация не требуется, если вы правильно написали свой управляемый код. До тех пор, пока на 64-битном компьютере установлены правильные каркасы, процесс JIT позаботится о любых различиях между 32- и 64-битными требованиями.
Единственное, о чем вам нужно беспокоиться в своем собственном коде, это о том, выполняете ли вы P / Invoke. В этом случае каждый раз, когда вы вызываете функцию API, которая использует тип HANDLE или тип void *, вы должны всегда использовать System.IntPtr, а не System.Int32. В мире .NET тип данных int ВСЕГДА 32-битный, даже на 64-битной машине. Аналогично, long всегда 64-битный, независимо от архитектуры.
А IntPtr всегда имеет размер void *, и поэтому JIT соответствует разным размерам в зависимости от архитектуры машины, на которой вы работаете.
Я тоже нашел эту ссылку полезной: http://blogs.intesoft.net/2007/12/default.aspx р>