Если у меня есть 32-битное приложение, написанное на C #, что мне нужно сделать, чтобы преобразовать его в 64-битное? Я предполагаю, что это сложнее, чем просто изменить целевую машину на 64-разрядную в Visual Studio и перекомпилировать.
Создание 64-битных приложений
Ответы (7)
Если вы не используете взаимодействие (COM, WinAPI) и не делаете предположений о размере указателей, это простой переход на другую платформу. Даже при использовании последнего у вас, вероятно, все в порядке, если вы не используете библиотеки, которые где-то делают вышеупомянутые предположения.
Чтобы процитировать MSDN относительно System.IntPtr:
Тип IntPtr разработан как целое число, размер которого зависит от платформы. То есть ожидается, что экземпляр этого типа будет 32-битным на 32-битном оборудовании и операционных системах и 64-битным на 64-битном оборудовании и операционных системах.
- Но другие типы .NET предназначены для фиксированного размера, независимо от платформы.
Вам действительно нужно, чтобы он работал в 64-битном режиме или вы просто хотите, чтобы он работал на 64-битной машине?
В последнем случае вы можете настроить проект C # на Win32, а не на AnyCPU. Это означает, что когда вы запускаете его на 64-битной машине, он будет работать через WOW (32-битную «эмуляцию»), это имеет то преимущество, что (неуправляемый) драйвер JET также будет работать 32-битным. Это должно решить вашу проблему.
Это зависит от того, что делает ваше приложение. Если он использует неуправляемые API, P / Invoke и арифметику указателей, вполне возможно, что он не будет работать на 64-битной платформе без некоторых модификаций. В противном случае все будет в порядке, вам даже не нужно указывать платформу, просто выберите Any CPU, и он должен работать.
Один из моих коллег только что столкнулся с проблемой в одном из своих личных проектов. Оказывается, Microsoft не писала драйверы Jet для 64-битных версий и не собирается этого делать.
Что странно, поскольку у Office 2010 будет 64-разрядная версия.
Мой вам совет - установите для свойств проекта значение x86 (не Any CPU) и оставьте его там. 64-битная Windows может без проблем запускать 32-битные приложения, а вот 16-битные приложения запускать не могут.
Как насчет того, чтобы сделать то, что предлагает этот вопрос? Замечу, я никогда раньше этого не делал.
http://msdn.microsoft.com/en-us/library/ms241064.aspx
Остальные комментарии - хорошие моменты. Вам также необходимо понимать изменения, связанные с виртуализацией реестра и узел Wow64.
Я предполагаю, что это сложнее, чем просто изменить целевую машину на 64-разрядную в Visual Studio и перекомпилировать.
Может быть нет. Если у вас нет никаких зависимостей от внешних библиотек, это все, что вам нужно сделать. Что делает его более сложным, так это развертывание. Вы не хотите отправлять 64-битный двоичный файл 32-битному пользователю. Итак, даже лучше, выберите вариант «Любой процессор», и ваше приложение будет автоматически JIT-компиляции как 64-разрядная на 64-разрядной машине (с установленной 64-разрядной версией фреймворка) и 32-разрядная (x86) везде. еще.
Но вы должны быть очень уверены, что у вас нет 32-битных зависимостей.