Помимо возможных проблем безопасности, если Вы выполняете отправленный пользователями код, большую часть времени существует лучший путь, который не включает перепарсинг кода каждый раз, когда это выполняется. Анонимные функции или свойства объектов могут заменить большую часть использования оценки и намного более безопасны и быстрее.
Можете ли вы сделать это во время выполнения?
if (IntPtr.Size == 4)
// 32 bit
else if (IntPtr.Size == 8)
// 64 bit
В моем коде C # я использую IntPtr.Size, он равен 4 для 32-битной версии и 8 для 64-битной:
string framework = (IntPtr.Size == 8) ? "Framework64" : "Framework";
Вы можете использовать директиву #if
и установить значение как переключатель компилятора (или в настройках проекта):
#if VISTA64
...
#else
...
#endif
и скомпилировать с:
csc /d:VISTA64 file1.cs
когда компиляция 64-битной сборки.
При использовании 64-разрядной версии необходимо учитывать два условия. Во-первых, это 64-битная ОС , а во-вторых, приложение , работающее в 64-битном режиме. Если вас беспокоит только само приложение, вы можете использовать следующее:
if( IntPtr.Size == 8 )
// Do 64-bit stuff
else
// Do 32-bit
Во время выполнения JIT-компилятор может оптимизировать ложное условие, потому что свойство IntPtr.Size является постоянным.
Между прочим, чтобы проверить, ОС 64-разрядная, мы используем следующую
if( Environment.GetEnvironmentVariable( "PROCESSOR_ARCHITEW6432" ) != null )
// OS is 64-bit;
else
// OS is 32-bit
В нем нет ничего, что могло бы сделать это за вас. Вы всегда можете #define
свой собственный символ и использовать его для условной компиляции, если хотите.
Я не уверен, что это именно то, что вы ищете, но я проверяю IntPtr.Size
, чтобы определить 32-битную или 64-битную среду выполнения. Обратите внимание, что это сообщает вам среду выполнения, что вы можете работать в WOW64
if (IntPtr.Size == 4)
{
//32 bit
}
else if (IntPtr.Size == 8)
{
//64 bit
}
else
{
//the future
}
Откройте диспетчер конфигурации
из сборки
. Оттуда вы сможете установить Активную платформу решения
и создать конфигурацию, специально предназначенную для x64, x86 или любого процессора. Оттуда у вас может быть код, который условно компилируется на основе текущей конфигурации.
Обратите внимание, что это обычно очень плохая идея. .Net-программы обычно распространяются как IL, а не как машинный код. Затем этот IL компилируется JIT-компилятором на каждой локальной машине при первой попытке пользователя запустить его. Оставляя выбранным по умолчанию «Любой ЦП», вы позволяете JIT-компилятору делать это определение для каждой отдельной машины.
Основное исключение для этого - когда у вас есть зависимость от 32-битной библиотеки. В этом случае вы не хотите, чтобы JIT-компилятор когда-либо компилировался для x64, потому что это может нарушить ваше взаимодействие с библиотекой.
вы позволяете JIT-компилятору делать это определение для каждой отдельной машины.Основное исключение для этого - когда у вас есть зависимость от 32-битной библиотеки. В этом случае вы не хотите, чтобы JIT-компилятор когда-либо компилировался для x64, потому что это может нарушить ваше взаимодействие с библиотекой.
вы позволяете JIT-компилятору делать это определение для каждой отдельной машины.Основное исключение для этого - когда у вас есть зависимость от 32-битной библиотеки. В этом случае вы не хотите, чтобы JIT-компилятор когда-либо компилировался для x64, потому что это может нарушить ваше взаимодействие с библиотекой.