Блок C#. Загрузка по сравнению с блоком. ReflectionOnlyLoad

Отвечая на ваш первый вопрос, набор представляет собой структуру данных, оптимизированную для заданных операций. Подобно математическому набору, он не обеспечивает или не поддерживает какой-либо конкретный порядок элементов. Абстрактная концепция набора не обеспечивает порядок, поэтому для реализации не требуется. Когда вы создаете набор из списка, Python имеет право изменять порядок элементов для нужд внутренней реализации, которые он использует для набора, который может эффективно выполнять заданные операции.

48
задан David Schmitt 20 February 2009 в 15:58
поделиться

4 ответа

Согласно ответу Jon, было бы полезно знать то, что находится в LoaderExceptions. Вместо этой информации я думаю, что могу рисковать предположением. От MSDN:

, Если блок имеет зависимости, метод ReflectionOnlyLoad не загружает их. Если необходимо исследовать их, необходимо загрузить их сами.

необходимо присоединить обработчик к AppDomain.ReflectionOnlyAssemblyResolve, чтобы помочь CLR загрузить любые зависимости блока, который Вы загружаете. Вы сделали это?

26
ответ дан Tim Cooper 7 November 2019 в 22:43
поделиться

Я полагаю, что Ваше общее понимание различий между Загрузкой и ReflectionOnlyLoad корректно. Проблема здесь (я думаю) состоит в том, что даже для простой загрузки типа CLR должен считать метаданные из блока, сам тип определяется в , также загружают метаданные из каждого блока, предки типа определяются в . Так, необходимо назвать блок. ReflectionOnlyLoad на всех блоках, которые определяют типы, которые являются предками типов, которые Вы загружаете.

Для предоставления примера предположите, что Вам определили следующий класс в блоке A.dll.

public class MyBase
{
   public void Foo() { }
}

и следующий класс определил в блоке B.dll.

public class MySubclass : MyBase
{
}

, Когда Вы называете блок. GetTypes на блоке B.dll, CLR попытается загрузить тип MySubclass и все его участники. Поскольку метод Foo определяется в MyBase в блоке A.dll (и не существует нигде в метаданных B.dll), CLR выдаст исключения загрузки типа, если блок A.dll не был загружен.

10
ответ дан C. Dragon 76 7 November 2019 в 22:43
поделиться

Методы ReflectionOnly являются единственным способом, которым можно загрузить определенный блок на диске для исследования, не идя через обычные правила Load/LoadFrom. Например, можно загрузить находящийся на диске блок теми же идентификационными данными как один в GAC. При попытке этого LoadFrom или LoadFile блок GAC ВСЕГДА загружается.

Кроме того, Вы не можете назвать GetCustomAttributes (...) на экземпляре блока возврата, так как это попытается инстанцировать Атрибутов на блоке, которые являются ReflectionOnly. Необходимо использовать статические методы класса CustomAttributeData для этого.

Никакие типы в блоке, загруженном через ReflectionOnly, нельзя инстанцировать.

9
ответ дан x0n 7 November 2019 в 22:43
поделиться

Никакой метод не может быть выполнен от блока, загруженного ReflectionOnlyLoad(), Вы доберетесь InvalidOperationException. Таким образом, это - безопасный способ определить контент блока использование отражения.

3
ответ дан abatishchev 7 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: