Какова цель параметра "Предпочитать 32-разрядный" в Visual Studio 2012 и как он на самом деле работает?
Мне неясно, как компилятор автоматически узнает, что нужно для 64-битной компиляции, когда это необходимо. Как он узнает, когда он может уверенно нацеливаться на 32-битную версию?
Мне в основном интересно, как компилятор знает, на какую архитектуру ориентироваться при компиляции. Анализирует ли он код и принимает ли решение на основе найденного?
4 ответа
Это так странно, что никто не ссылается на запись в блоге, что на самом деле означает AnyCPU, начиная с.NET 4.5 и Visual Studio 11:
В.NET 4.5 и Visual Studio 11 сыр был перемещен. По умолчанию для большинства проектов.NET снова используется AnyCPU, но для AnyCPU теперь имеется более одного значения. Существует дополнительный подтип AnyCPU, "Любой 32-битный процессор", который является новым по умолчанию (в общем, теперь есть пять опций для переключателя компилятора / платформы C#: x86, Itanium, x64, anycpu и anycpu32bitpreferred). При использовании варианта "Предпочитать 32-разрядный" AnyCPU семантика выглядит следующим образом:
- Если процесс выполняется в 32-разрядной системе Windows, он выполняется как 32-разрядный процесс. IL скомпилирован в машинный код x86.
- Если процесс выполняется в 64-разрядной системе Windows, он выполняется как 32-разрядный процесс. IL скомпилирован в машинный код x86.
- Если процесс выполняется в системе ARM Windows, он выполняется как 32-разрядный процесс. IL скомпилирован в машинный код ARM.
Таким образом, разница между "Любой 32-битный процессор предпочтительнее" и "x86" заключается только в следующем: приложение.NET, скомпилированное для x86, не сможет работать в системе ARM Windows, но приложение "Любой 32-битный процессор". будет работать успешно
Когда у меня было выбрано 32-битное предпочтение, при запуске на нашем сервере он пытался использовать 32-битный драйвер БД вместо 64-битного, который мы установили, поэтому он не подключался к БД, когда мы его запускали, поэтому запросы были сбой из-за невозможности подключения.
Причина в том, что если вы не хотите использовать больше памяти с 64-битными приложениями. Это означает, что если ваше приложение AnyCPU, вы хотите работать как 32-битный.
Чтобы добавить больше, настройка в Visual Studio нацелена на конкретный CLR:
Visual Studio устанавливает 32-разрядную версию CLR на компьютере с архитектурой x86, а также 32-разрядную версию и соответствующую 64-разрядную версию CLR на 64-разрядном компьютере под управлением Windows. (Поскольку Visual Studio представляет собой 32-разрядное приложение, при установке в 64-разрядной системе оно работает под управлением WOW64.)
Пожалуйста, обратитесь к статье 64-битные приложения ( MSDN).