У меня была та же проблема при запуске Android Studio 1.5.1 для Windows 8.1 (64-разрядная версия), и я решил ее, добавив следующие две системные переменные среды:
SLAVE_AAPT_TIMEOUT = 30
JAVA_HOME = C:\Program Files\Java\jdk1.8.0_65
( Обратите внимание: : путь к системной переменной среды JAVA_HOME зависит от того, где находится ваш JDK и что версия вашего JDK может отличаться от приведенного выше примера).
Без доступа к типу (и без «InternalsVisibleTo» и т. Д.) Вам пришлось бы использовать отражение. Но лучше задать вопрос: следует ли получать доступ к этим данным? Это не часть контракта открытого типа ... мне кажется, что он предназначен для обработки как непрозрачный объект (для их целей, а не для вас).
Вы описали его как поле общедоступного экземпляра ; чтобы получить это через отражение:
object obj = ...
string value = (string)obj.GetType().GetField("test").GetValue(obj);
Если это на самом деле свойство (а не поле):
string value = (string)obj.GetType().GetProperty("test").GetValue(obj,null);
Если оно не является общедоступным, вам нужно использовать перегрузку BindingFlags
для GetField
/ GetProperty
.
Важное замечание : будьте осторожны с подобным отражением; реализация может измениться в следующей версии (нарушая ваш код) или она может быть запутана (нарушая ваш код), или вам может не хватить «доверия» (нарушение кода). Вы замечаете закономерность?
Отражение.
using System.Reflection;
Vendor vendor = new Vendor();
object tag = vendor.Tag;
Type tagt = tag.GetType();
FieldInfo field = tagt.GetField("test");
string value = field.GetValue(tag);
Используйте силу с умом. Не забывайте о проверке ошибок. :)
Ну, не можете. Внутренние классы не могут быть видны за пределами своей сборки, поэтому нет явного способа получить к нему прямой доступ - конечно, AFAIK. Единственный способ - использовать позднее связывание во время выполнения через отражение, тогда вы можете косвенно вызывать методы и свойства из внутреннего класса.
Я вижу только один случай, когда вы разрешили бы доступ к вашим внутренним элементам другой сборке, и это для целей тестирования.
Говоря о том, что существует способ разрешить доступ к сборкам «Друг» для внутренних:
В файле AssemblyInfo.cs проекта вы добавляете строку для каждой сборки.
[assembly: InternalsVisibleTo("name of assembly here")]
эта информация доступна здесь.
Надеюсь, это поможет.