У меня была проблема в .NET 3.5, если вы строите с оптимизацией, добавьте в метод еще одну переменную, которая называется аналогично существующей переменной того же типа в той же области видимости, что и одна из двух (новая или старая переменная) ) будет недействительным во время выполнения, и все ссылки на недопустимую переменную будут заменены ссылками на другую.
Так, например, если у меня есть abcd типа MyCustomClass и у меня есть abdc типа MyCustomClass, и я установил abcd.a = 5 и abdc.a = 7, тогда обе переменные будут иметь свойство a = 7. Чтобы решить эту проблему, обе переменные должны быть удалены, программа скомпилирована (надеюсь, без ошибок), затем они должны быть добавлены заново.
Я думаю, что несколько раз сталкивался с этой проблемой при работе с .NET 4.0 и C # при работе с приложениями Silverlight. На моей последней работе мы часто сталкивались с проблемой в C ++. Возможно, это произошло из-за того, что компиляция заняла 15 минут, поэтому мы собирали только те библиотеки, которые нам были нужны, но иногда оптимизированный код был точно таким же, как и в предыдущей сборке, даже если был добавлен новый код и об ошибках сборки не сообщалось. *
Да, оптимизаторы кода создаются умными людьми. Они также очень сложны, поэтому часто встречаются ошибки. Я предлагаю полностью протестировать любой оптимизированный выпуск большого продукта. Как правило, продукты с ограниченным использованием не стоят полной версии, но их все равно следует тестировать, чтобы убедиться, что они правильно выполняют свои общие задачи.