MonoDevelop Intellisense не показывает все элементы в PCL

В настоящее время я создаю приложение MonoTouch и хочу поделиться как можно большим количеством кода между ним и любыми другими будущими платформами. Я решил, что лучше всего будет использовать PCL для общего кода.

Проблема заключается в том, что когда я пытаюсь сослаться на System.Collection.Generic.List‹T› в моей библиотеке PCL, MOnoDevelop выделяет текст списка красным цветом (как бы говоря, что ссылка не может быть найдена), но когда я создаю проект , у компилятора проблем нет и нормально строит...

Например, у меня может быть следующий код в моем PCL

MonoDevelop выделяет неверные ошибки разрешения

и MD отлично скомпилирует это, и этот метод можно использовать из моего приложения MT.

Однако работать с ним неприятно, так как это вводит меня в заблуждение, заставляя думать, что код, который должен скомпилироваться, не будет, и я упускаю много преимуществ IntelliSense.

Я пробовал решение, указанное о переключении компилятора, но это не помогло. Надеюсь, у кого-то есть предложения, как это исправить?

Ради интереса, вот что Intellisense дает мне для пространства имен System.Collections.Generic (в этом списке есть один элемент вне поля зрения - Stack‹T›)

Список IntelliSense System.Collections.Generic в проекте MonoDevelop с PCL

Следует также упомянуть, что я использую MonoDevelop v3.0.5, Mono v2.10.9, MT v6.0.6.


person Xerxes    schedule 06.12.2012    source источник
comment
Есть ли ссылка на mscorlib в MonoDevelop? Я знаю, что компилятор и VS неявно создают для него ссылку.   -  person leppie    schedule 06.12.2012
comment
@leppie показаны только ссылки на System, System.Core, System.Xml, и все 3 имеют следующую ошибку: сборка недоступна для профиля .NETPortable 4.0 Profile1 (в Mono 2.10.9)   -  person Xerxes    schedule 06.12.2012
comment
Stack<T> живет в System.dll. Можете принудительно попробовать добавить ссылку на mscorlib?   -  person leppie    schedule 06.12.2012
comment
Добавил реф, но не помогло. Даже если это сработает, это не поможет, потому что это будет ссылка на полный профиль 4.0, а не на PCL, я прав?   -  person Xerxes    schedule 06.12.2012
comment
Извините, вычеркните первую часть моего предыдущего комментария. Добавление ссылки в mscorlib действительно сработало (мне нужно было перезапустить MD, чтобы он заработал). В любом случае, разве компоновка с mscorlib 4.0 не противоречит цели использования PCL?   -  person Xerxes    schedule 06.12.2012
comment
Это не статическое связывание, поэтому во время выполнения следует использовать mscorlib PCL :)   -  person leppie    schedule 06.12.2012


Ответы (1)


Поддержка переносимых библиотек классов в MonoDevelop 3.x является хаком для Linux и Mac, поскольку на этих платформах нет сборок PCL (у Mono нет сборок PCL).

Когда MonoDevelop компилирует проект PCL на Mac или Linux (где настоящие сборки PCL недоступны), он использует взломанный файл Microsoft.Portable.CSharp.targets для ссылки на сборки MonoTouch или Mono4Android (если они доступны), в противном случае возвращается к компиляции против сборок .NET 4.0.

Конкретная проблема, которую вы видите, вызвана тем, что MonoDevelop не может найти настоящие сборки PCL mscorlib/System/etc PCL в вашей системе.

person jstedfast    schedule 06.12.2012