Ответ 1
Во-первых, позвольте мне быть тупым и сказать, что я не знаю всей истории здесь, я собираюсь ответить тем, что, как я думаю, знаю. Я с удовольствием удалю или изменю свой ответ, если кто-нибудь скажет мне, где я ошибаюсь.
Как я понимаю, этот параметр является флагом, в котором говорится, что "сборка должна выполняться в этом типе архитектуры". Это для настроек x86 и x64. Настройка MSIL/.NET просто говорит: "Мне все равно, я могу работать на любом из них, поэтому выберите тот, который будет оптимальным или доступным".
Например, вы можете выполнять вызовы функций API Win32 через P/Invoke, и в этом случае сборка не будет работать на x64, и вы должны указать ее как x86.
Итак, если мое понимание верное, вот как три флага делают сборку (обратите внимание: это основная сборка, сборка программы, которая диктует это, а не каждую отдельную сборку для себя) на разных платформах:
Setting x86 x64 <-- Platform (CPU/OS)
MSIL/.NET 32-bit 64-bit
x86 32-bit 32-bit
x64 N/A (*) 64-bit
N/A для сборки x64 на x86 означает, что сборка не загружается, и вы получите исключение, если попытаетесь.
Также обратите внимание, что конфликтующие настройки, связанные с x86 и x64, могут привести к сбою вашей программы в той или иной точке. Если основная сборка установлена на x86, она будет работать как 32-разрядный процесс как в 32-разрядной, так и в 64-разрядной операционной системе, и любые попытки загрузки сборок, помеченных как x64, не будут выполнены. Аналогично, если основная сборка установлена на x64, она будет работать только в 64-разрядной операционной системе, и любая попытка загрузки сборки, установленной на x86, не будет выполнена.
Основная исполняемая сборка MSIL будет работать как 32-разрядная в 32-разрядной операционной системе (например, если она была установлена на x86 с указанной выше точкой отказа) и как 64-разрядная в 64-разрядной операционной системе ( например, если он был установлен на x64, с указанной выше точкой отказа.)
Очевидно, Обычно вы хотите перейти с настройкой MSIL, если вы не вызываете сборки, помеченные как что-то конкретное, и пока вы не выполняете P/Invoke, t переносится через 32-битный и 64-разрядный (я понятия не имею, работает ли это, если функции P/Invoke для win-api будут сопоставляться с правильно подобранной dll или нет.)
Поскольку ссылки являются указателями, а указатели сохраняются как собственный x-разрядный адрес на двух платформах, в зависимости от количества ссылок, которые у вас есть, у вас может быть дело против перехода только с MSIL. Однако вы должны убедиться, что это проблема, прежде чем вы вносите изменения в свои настройки.