Доступен ли InternalsVisibleTo для предоставления модульным тестам MonoTouch доступа к внутренней части библиотеки MT?

Можно ли использовать атрибут сборки InternalsVisibleTo в файле AssemblyInfo библиотеки MonoTouch, чтобы разрешить модульному тесту MonoTouch (Touch.Unit) доступ к внутренним компонентам библиотеки MonoTouch?

Это то, что отлично подходит для использования в мире без MonoTouch, чтобы позволить тестировать внутренние компоненты без необходимости прыгать через обручи. Однако я не могу заставить его работать с модульным тестом MonoTouch. Поэтому, прежде чем идти дальше, я подумал, что хотел бы спросить, возможно ли это вообще, поскольку это приложение iOS, которое является тестовым исполнителем, поэтому не уверен, что приложение iOS, скомпилированное в собственный код, может даже сделать это.


person Rodney S. Foley    schedule 30.12.2012    source источник


Ответы (1)


Да, так и должно быть (или это ошибка), даже если я не помню, чтобы сам пытался это сделать.

Ключевым моментом является то, что [InternalsVisibleTo] в основном является трюком компилятора и поддерживается компилятором C# (smcs), поставляемым с MonoTouch (поскольку он используется внутри BCL). Таким образом, нет никаких причин, по которым он не должен работать из приложения на основе Touch.Unit.

Теперь имейте в виду, что все остальные правила остаются в силе. Например. если управляемый компоновщик включен, весь неиспользуемый код будет удален (даже если он помечен атрибутом).

person poupou    schedule 30.12.2012
comment
Итак, у меня есть две проблемы: 1) Приложение Touch.Unit не подписано и не имеет строгого имени. Я настроил его так, чтобы он был подписан и имел сильное имя, но не использовал информацию. 2) Приложение Touch.Unit не получает сборочную версию. Его версия всегда 0.0.0.0, хотя у меня есть AssemblyInfo.cs, в которой указано, что она должна быть 1.0.0.0. Также я попробовал это со всеми тремя видами поведения ссылок и без изменений. Я просто пытаюсь заставить его работать в симуляторе, прежде чем пытаться использовать его на оборудовании. - person Rodney S. Foley; 30.12.2012
comment
Сообщение об ошибке, предоставленное MD, выглядит следующим образом: Ошибка CS0281: доступ для друзей был предоставлен для «MonoTouchUnitTests, PublicKeyToken = 0c7aa341ab3f9c12», но выходная сборка называется «MonoTouchUnitTests, версия = 0.0.0.0, культура = нейтральная, PublicKeyToken = null». Попробуйте добавить ссылку на «MonoTouchUnitTests, PublicKeyToken=0c7aa341ab3f9c12» или измените имя выходной сборки, чтобы оно соответствовало ей. - person Rodney S. Foley; 30.12.2012
comment
@RodneyFoley Это похоже на проблемы со сборкой, которые возникают намного раньше, чем проблемы во время выполнения, которые могут повлиять на Touch.Unit. Прикрепите свое решение к отчету об ошибке, и мы рассмотрим его (вероятно, это связано с конфигурацией, но, возможно, инструментарий скрывает правильный выбор). - person poupou; 30.12.2012
comment
Я разместил это на форумах Xamarin, и вот решение для этого. Ошибку тоже напишу, спасибо. cdn.vanillaforums.com/xamarin.vanillaforums.com/FileUpload/ 38/ - person Rodney S. Foley; 30.12.2012