Свободный xaml, ссылающийся на версионные сборки - PullRequest
2 голосов
/ 04 ноября 2008

У меня уникальная ситуация с разработкой, и я хотел бы получить от других информацию.

У меня есть ситуация, когда мне нужно загрузить свободные файлы xaml в приложении с расширенными возможностями клиента. Данный свободный xaml-файл может содержать ссылки на сборку, которая в данный момент не загружена в память. поэтому ссылка на сборку загружается перед загрузкой свободного xaml. Свободный XAML и связали сборки хранятся на разных внутренних серверах, которые загружаются на клиент и загружается динамически.

Свободный xaml и / или сборки зависят от версии, и, к сожалению, приложение может Не должно быть остановки между рендерингом xaml. v1 со сборкой. v1 с сервера A и xaml. v1 со сборкой. v2 на сервере B. Обе сборки используют одно и то же объявление пространства имен, поэтому «старые» сборки все еще могут работать с "более новыми" для любого свободного xaml.

Проблема в том, что я не получаю ссылку на assembly.v2, если загружаю xaml.v2, который содержит ссылки на "более новые" функции в assembly.v2.

Я, очевидно, не могу выгрузить assembly.v1 из домена приложения, и я не уверен, что смогу ссылочные элементы в xaml, которые загружаются в другой домен приложения с помощью маршаллинга.

Любые идеи, кроме использования различных ссылок на пространства имен?

Ответы [ 3 ]

1 голос
/ 16 мая 2009

Другой вариант (при условии, что вы корректируете свои сборки) - просто включить версию сборки в объявление ns, например:

xmlns:ns0="clr-namespace:MyCompany.MyProject.MyNameSpace; Assembly=MyCompany.MyProject, Version=1.0.0.0"
1 голос
/ 06 февраля 2009

Я предполагаю, что вы уже делаете динамическое разрешение сборки и загрузку? Если это так, то вы можете попробовать подставить поддельное имя сборки вместо реального имени сборки в Xaml - затем вы можете использовать это в своем коде разрешения сборки, чтобы загрузить и вернуть нужную сборку. например если ваш исходный код Xaml:

xmlns:myassembly="clr-namespace:MyApp.MyAssembly;assembly=MyAssembly"

и вы знаете, что Xaml хочет v2 для MyAssembly, замените ссылку на сборку в строке Xaml, прежде чем анализировать ее на:

xmlns:myassembly="clr-namespace:MyApp.MyAssembly;assembly=MyAssembly.v2"

.. затем в коде разрешения / загрузки сборки, когда вы видите бит ".v2" на конце, который вы ищете, и вместо этого загружаете эту сборку.

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

0 голосов
/ 16 мая 2009

Я не подтвердил, сработает ли это, но я верю, что это может. Вы можете использовать XmlnsDefinitionAttribute (на уровне сборки). Э.Г.

Assembly V1 -> AssemblyInfo.cs

[assembly: XmlnsDefinition( "http://schema.mycompany.com/myproject/v1", "MyCompany.MyProject" )]

Assembly V2 -> AssemblyInfo.cs

[assembly: XmlnsDefinition( "http://schema.mycompany.com/myproject/v2", "MyCompany.MyProject" )]

А потом в xaml:

xmlns:myassembly="http://schema.mycompany.com/myproject/v2"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...