Имея сборку, которую я не могу изменить (предоставляется поставщиком), которая имеет метод, возвращающий тип объекта, но на самом деле имеет внутренний тип.
Как я могу получить доступ к полям и / или методам объекта из моей сборки?
Имейте в виду, что я не могу изменять сборку, предоставленную поставщиком.
По сути, вот что у меня есть:
От продавца:
internal class InternalClass
public string test;
end class
public class Vendor
private InternalClass _internal;
public object Tag {get{return _internal;}}
end class
Из моей сборки с использованием сборки производителя.
public class MyClass
{
public void AccessTest()
{
Vendor vendor = new Vendor();
object value = vendor.Tag;
// Here I want to access InternalClass.test
}
}
InternalsVisibleTo
но не включили вашу сборку? Если символ не скрыт на самом деле, это часть ABI.Я вижу только один случай, когда вы разрешили бы доступ своим внутренним членам к другой сборке, и это для целей тестирования.
Говоря, что есть способ разрешить "Другим" сборкам доступ к внутренним компонентам:
В файле AssemblyInfo.cs проекта вы добавляете строку для каждой сборки.
эта информация доступна здесь.
Надеюсь это поможет.
источник
Я хотел бы поспорить с одним моментом - вы не можете расширить исходную сборку - используя Mono.Cecil, вы можете внедрить
[InternalsVisibleTo(...)]
в сборку 3pty. Обратите внимание, что могут быть юридические последствия - вы возитесь со сборкой 3pty и техническими последствиями - если сборка имеет строгое имя, вам нужно либо удалить его, либо повторно подписать с другим ключом.И такой код:
источник
Отражение.
Используйте силу с умом. Не забывайте о проверке ошибок. :)
источник
Ну не можешь. Внутренние классы не могут быть видны вне своей сборки, поэтому нет явного способа получить к нему прямой доступ - конечно, AFAIK. Единственный способ - использовать позднее связывание во время выполнения через отражение, тогда вы можете косвенно вызывать методы и свойства из внутреннего класса.
источник