Я недавно начал новую работу, и одной из первых вещей, о которых я заметил, что все говорят, было "обновление" всех наших приложений .NET до x64. Сначала я подумал, что это странно, поскольку все мы знаем, что .NET компилируется в платформенно-независимый IL, а код выполняется конкретным CLR.
Поискав немного дальше, я нашел эту полезную статью и этот пост на SO, которые помогли объяснить ситуацию.
Итак, теперь я понимаю, что IL не меняется, только мета-данные, в основном говорящие о том, запускать в WOW64 или нет на системе x64 (в двух словах).
Итак, если я на системе x64, я могу указать "Any CPU", чтобы запуститься нативно, но не поддерживать 32-битные dll; я могу указать "x86", который будет поддерживать 32-битные dll (поскольку они оба будут работать под WOW64); но когда я должен указать "x64"? Кажется, что 64-битные dll будут поддерживаться в сценарии "Any CPU" на системе x64. Так ли это, если я хочу помешать кому-то запустить мое приложение на 32-разрядной системе или обеспечить сбой при попытке загрузить 32-разрядные dll?
Мне также кажется, что вам только нужно установить значение, отличное от "Any CPU", если в вашем проекте есть сторонние dll, о которых нужно беспокоиться. Не лучше ли оставить значение "Any CPU" для всех остальных проектов, не имеющих дело с другими dll?
Если я все же установлю "x86", потому что у меня 32-разрядная сторонняя dll, будет ли мое приложение считаться запущенным в 64-разрядном режиме, если оно работает на 64-разрядной системе под WOW64?