2012-04-07 3 views
5

Я работаю над проектом iOS/MonoTouch, который использует много отражений. Все прекрасно работает, но когда я скомпилировать Debug | версия iPhone я получаю ошибку:Ошибка MonoTouch MT2002: Не удается разрешить ссылку

error MT2002: Can not resolve reference: System.Boolean System.Reflection.PropertyInfo::op_Equality(System.Reflection.PropertyInfo,System.Reflection.PropertyInfo)

Самое смешное, что релиз | iPhone сборки отлично работает.

Что может быть неправильным?

ответ

7

Перегрузка оператора == для PropertyInfo, которая внутренне названа op_Equality, доступна на .NET 4.0 и новее. IOW он недоступен в версии mscorlib.dll, которая поставляется с MonoTouch (который является надмножеством профиля Silverlight, 2.1, profile).

Что происходит, скорее всего, другой вариант предварительно скомпилированные сборки, которая используется при построении отладки (по сравнению Release). Эта версия использует методы, недоступные в MonoTouch, и это приведет к ошибкам при связывании или AOT-приложении.

повторно скомпилируйте этот сборник с версией mscorlib.dll, поставляемой с MonoTouch. Это позволит избежать ссылки на op_Equality (и использует Equals), и сборка должна работать нормально.

+1

Спасибо за ваш быстрый ответ! Что на самом деле произошло: я использую Visual Studio на своем ПК для редактирования, и я даже могу его построить. Конечно, мне нужно перестроить Mac, чтобы иметь возможность работать. Я предполагаю, что сборка на ПК вытащила неправильный mscorlib. После удаления файлов obj и bin во всех проектах перекомпиляция на Mac работала нормально. –

+0

Я возвращаюсь к этому ответу каждый раз, когда у меня возникает эта проблема. Я просто забываю о решении. :-) –

+1

@DanAbramov, который скоро должен стать историческим фактом/FAQ ;-) – poupou

Смежные вопросы