В чем разница между Microsoft.NET\Framework и Microsoft.NET\Framework64?

Я хотел бы узнать разницу между .NET-режимами x86 и x64.

  • В чем разница для обоих режимов?

  • Можно ли скомпилировать мои библиотеки, например, с .NET x64 и .NET x86?

  • Будет ли какая-то разница для меня, если я выберу x64 вместо x86?

  • В чем преимущество .NET x64?

  • Нужно ли мне устанавливать что-нибудь особенное, если я хочу использовать .NET x64?

Ответ 1

Сложный вопрос, я попытаюсь упростить:

  • Любое приложение .NET может быть скомпилировано как для x86 (32-разрядных), так и для 64-разрядных (64-разрядных) одновременно. Фактически они делают по умолчанию. Вы можете изменить это, изменив целевой ЦП на вкладке "Создать" в Свойствах проекта. Поддерживаемые цели: "Любой" (будет компилировать "Just-In-Time" до 32 или 64 бит в зависимости от поддержки оперативной системы), "x86" будет скомпилирован до 32-разрядной версии, которая работает на всех платформах, а "x64" скомпилируется до 64 -бит, который работает только на 64-битных платформах.

  • Да. См. Выше. Также обратите внимание, что иногда выполняется второй уровень компиляции, и это NGEN. Он создает собственное изображение для определенного типа процессора. Однако, если вы общаетесь с этим, вы уже знаете.

  • Для .dll выберите для них "Любой" ЦП. Для .EXE(точка входа) вы должны выбрать Any, x86 или x64. Есть несколько вещей, которые следует учитывать: приложения x86.Net, обращающиеся к родным файлам Windows.dll(interpo), требуют x86 DLL файлов. Таким образом, 64-битное приложение не может получить доступ к 32-битным API-вызовам и наоборот. Это часто является причиной того, что приложения .Net будут работать с 64-разрядными операционными системами. Способ решения этой проблемы - либо правильно исправить .dll, либо просто установить приложение .Net на x86 (32-разрядное) по свойствам. Все остальные зависимости автоматически станут 32-битными во время компиляции "Just-In-Time", если они установлены на "Любые".

  • Преимущества 64-битных сложны. Есть преимущества и недостатки в зависимости от того, что делает ваше приложение. Наиболее очевидным преимуществом является то, что ваше приложение может сломать 2GB-барьер памяти. Недостаток, как описано в № 3, если вы ссылаетесь на 64-разрядную .dll, ваше приложение не будет выполняться в 32-разрядных операционных системах.

  • Все выходит из коробки. Не беспокойтесь о чем-нибудь, кроме всего вышеперечисленного.:)

Ответ 2

  • Если вы компилируете свой код для любого CPU, x64 пытается загрузить собственные внешние библиотеки DLL в качестве версии x64. Это может быть проблематично, если эта DLL 32-разрядная. Это исключает.
  • Да, вы можете создать его как любой процессор
  • s. 1
  • Он (может) внутренне использует x64 преимущества операционной системы, такие как 4 ГБ + память и т.д.
  • Нет, это делается установщиком .NET по умолчанию.

Ответ 3

  • Существуют режимы для 32-битных или 64-битных платформ (операционные системы).
  • Да, вы можете - на самом деле VS устанавливает 32-разрядную версию CLR на компьютере x86 и 32-разрядную и 64-разрядную (обе версии) версии CLR на 64-битной Windows. Поскольку VS - 32-битное приложение, оно работает под WOW64 на 64-битных компьютерах.
  • Многие приложения ведут себя одинаково как на 32-битном CLR, так и на 64-битном CLR. Но могут быть некоторые различия (например, некорректная выгрузка платформы, использующая Int32 для дескрипторов вместо IntPtr)
  • То же, что и преимущество 64-разрядных операционных систем vs x86.
  • Если вы используете 64-битные Windows и VS2010, у вас есть все, что вам нужно для разработки .net x64