powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / [SL] Проблема с загрузкой .xaml через XElement
5 сообщений из 5, страница 1 из 1
[SL] Проблема с загрузкой .xaml через XElement
    #36973830
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Столкнулся с интересной проблемой. Нужно получить список сборок из AppManifest.xaml, намереваюсь использовать XElement. Загружаю xaml, пытаюсь получить нужный узел - и XElement его не находит. Почему так?

Код: plaintext
1.
2.
XElement root = XElement.Load("AppManifest.xml");
XElement node = root.Element("Deployment.Parts"); //node is null - почему?
AppManifest.xaml
Код: plaintext
1.
2.
3.
4.
5.
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" EntryPointAssembly="TriangleApp" EntryPointType="TriangleApp.App" RuntimeVersion="4.0.50401.0">
  <Deployment.Parts>
    <AssemblyPart x:Name="TriangleApp" Source="TriangleApp.dll" />
    <AssemblyPart x:Name="TriangleClassLibrary" Source="TriangleClassLibrary.dll" />
  </Deployment.Parts>
</Deployment>

Использую SL 4.0, VS 2010.

PS. Интересный момент: убираем xmlns=" http://schemas.microsoft.com/client/2007/deployment" из AppManifest.xaml - все работает как часы.
...
Рейтинг: 0 / 0
[SL] Проблема с загрузкой .xaml через XElement
    #36974813
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня вот такой рабочий код (уже не помню откуда взял), мож пригодится
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        private AssemblyPartCollection deploymentParts(Stream xapStream)
        {
            XmlReader reader = XmlReader.Create(Application.GetResourceStream(new StreamResourceInfo(xapStream, null), 
new Uri("AppManifest.xaml", UriKind.Relative)).Stream);
            AssemblyPartCollection parts = new AssemblyPartCollection();
            if (reader.Read()) {
                reader.ReadStartElement();
                if (reader.ReadToNextSibling("Deployment.Parts")) {
                    while (reader.ReadToFollowing("AssemblyPart")) {
                        parts.Add(new AssemblyPart() { Source = reader.GetAttribute("Source") });
                    }
                }
            }
            return parts;
        }

PS. в хмл-ридерах/парсерах/сериализаторах столько "мутаций/мутантов" что разбираться с вопросом "node is null - почему?" нет никакого желания, хотя ответ может быть и прост... :)
...
Рейтинг: 0 / 0
[SL] Проблема с загрузкой .xaml через XElement
    #36975027
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пережитки SL3.

Различия в обработке XAML между Silverlight 3 и Silverlight 4

Пространства имен XAML
Silverlight 3 налагает следующие ограничения для объявлений пространства имен XAML, отличные от Silverlight 4.

Корневой элемент обязательно должен содержать объявление пространства имен по умолчанию. Неявные значения не предполагаются.


Любое объявление пространства имен по умолчанию (в корневом элементе или нет) должно быть http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/client/2007 или пространством имен XPS ( http://schemas.microsoft.com/xps/2005/06), что используется редко.


Манифест приложения Silverlight технически является XAML, но его корневой элемент обычно является объектом Deployment, который, как правило, должен использовать пространство имен XAML по умолчанию xmlns=" http://schemas.microsoft.com/client/2007/deployment" для разрешения.


Silverlight 4 может также иметь подобные ограничения, но они существуют только в поведении компиляции разметки XAML для действия при построении Page, обычно не в средстве синтаксического анализа XAML, используемом во время выполнения.
...
Рейтинг: 0 / 0
[SL] Проблема с загрузкой .xaml через XElement
    #36975993
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,
Спасибо, нашел примерно то же самое, но с использованием Linq.
Кстати, вариант через XmlReader лучше, потому что позволяет убрать референс на System.Xml.Linq и существенно сократить объем .xap-пакета.
Код: plaintext
1.
2.
3.
4.
5.
XElement root = XElement.Load(ManifestStream);
List<XElement> deploymentParts = (from assemblyParts in root.Elements().Elements() select assemblyParts).ToList();

listBox1.Items.Clear();
foreach (XElement assembly in deploymentParts)
    listBox1.Items.Add(assembly.Attribute("Source").Value);

МСУ,
Однако. Спасибо за информацию.
...
Рейтинг: 0 / 0
[SL] Проблема с загрузкой .xaml через XElement
    #36985657
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем, а ларчик просто открывался.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Stream ManifestStream = Application.GetResourceStream(XapStreamResourceInfo,
    new Uri("AppManifest.xaml", UriKind.Relative)).Stream;

XElement root = XElement.Load(ManifestStream);
XNamespace ns = "http://schemas.microsoft.com/client/2007/deployment";
XNamespace x = "http://schemas.microsoft.com/winfx/2006/xaml";

var dllNames = root
    .Elements(ns + "Deployment.Parts")
    .Elements(ns + "AssemblyPart")
    .Select(part => part.Attribute("Source").Value);
Автор забыл про неймспейсы, за что и поплатился.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / [SL] Проблема с загрузкой .xaml через XElement
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]