Как мы можем привести Frame.Content к типу страницы в WPF - PullRequest
0 голосов
/ 14 апреля 2010

В принципе; Мне нужно вызвать метод на моей странице WPF из фрейма WPF, куда я загружаю страницу WPF. Я получаю загруженную страницу, используя свойство Frame.Content, и преобразую ее в тип моей страницы, поскольку свойство Content возвращает тип объекта. Проект компилируется успешно, однако он генерирует исключение InvalidCastException во время выполнения.

//This line throws InvalidCastException at runtime...
((PageA)TargetFrame.Content).methodA();

Вот подробности исключения:


[A]LoongNamespaceA.PageA cannot be cast to [B]LoongNamespaceA.PageA.
Type A originates from 'AssemblyA, Version=1.0.0.58, Culture=neutral, PublicKeyToken=null' in the context 'LoadFrom' at location 'C:\Users\abdullah.battal\AppData\Local\AssemblyA.dll'.
Type B originates from 'AssemblyA, Version=1.0.0.58, Culture=neutral, PublicKeyToken=null' in the context 'Default' at location 'C:\loongPathToSourceProject\bin\AssemblyA.dll'.

обратите внимание на разницу контекста и местоположения ...

как мы можем решить это?

1 Ответ

0 голосов
/ 15 апреля 2010

Ваш класс, который выполняет вызов метода, ожидает сборки, загруженной в контекст по умолчанию в 'C: \ loongPathToSourceProject \ bin \ AssemblyA.dll'. Фактический отображаемый тип был загружен из C: \ Users \ abdullah.battal \ AppData \ Local \ AssemblyA.dll 'в контекст LoadFrom.

Поскольку эти типы относятся к разным сборкам на диске, система типов распознает их как разные типы и не может привести их к типу, к которому выполняется преобразование (даже если они имеют одинаковую подпись, .NET не ' не может распознать их так же, как они пришли из другого контекста).

В этой статье на MSDN описано, что сборки, использующие LoadFrom, имеют несколько недостатков, а именно:

Если сборка загружена LoadFrom и путь зондирования включает в себя сборку с тем же идентичность, но другое место, InvalidCastException, MissingMethodException или другое может произойти неожиданное поведение.

Возможно, вы захотите переработать динамическую загрузку ваших сборок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...