Извлечь сборку из всех DLL внутри XAP - PullRequest
2 голосов
/ 27 сентября 2010

У меня есть байтовый массив для XAP Silverlight. Мне нужно извлечь все DLL внутри xap из массива байтов. Как только я получаю dll, мне нужно извлечь из него сборки. Xver Silverlight хранится в репозитории, и репозиторий всегда возвращает мне байтовый массив XAP. Есть ли какой-либо стандартный API, доступный в C # для достижения этой функциональности? Если нет, то как мы можем добиться этого? это?

С уважением, Abhishek

Ответы [ 2 ]

3 голосов
/ 07 октября 2010

Создайте MemoryStream из вашего байтового массива и вызовите эту функцию:

public List<Assembly> ExtractAssembliesFromXap(Stream stream) {
        List<Assembly> assemblies = new List<Assembly>();

        string appManifest = new StreamReader(Application.GetResourceStream(
            new StreamResourceInfo(stream, null), new Uri("AppManifest.xaml",
                                       UriKind.Relative)).Stream).ReadToEnd();

        XElement deploy = XDocument.Parse(appManifest).Root;

        List<XElement> parts = (from assemblyParts in deploy.Elements().Elements()
                                select assemblyParts).ToList();

        foreach (XElement xe in parts) {
            string source = xe.Attribute("Source").Value;
            AssemblyPart asmPart = new AssemblyPart();
            StreamResourceInfo streamInfo = Application.GetResourceStream(
                 new StreamResourceInfo(stream, "application/binary"),
                 new Uri(source, UriKind.Relative));

            assemblies.Add(asmPart.Load(streamInfo.Stream));
        }
        return assemblies;
    }
1 голос
/ 27 сентября 2010

Стандартного API нет, но сделать это не сложно.XAP-файл - это просто ZIP-файл с другим расширением.Используйте библиотеку, такую ​​как DotNetZip или SharpZipLib, чтобы добраться до ее содержимого (эти библиотеки могут принимать потоковый или байтовый массив, поэтому вы должны иметь возможность передавать свой байтовый массив XAP прямо в них для извлечения файлов).Я не уверен, что вы имеете в виду, когда получаете библиотеки DLL и извлекаете из них сборки - библиотеки DLL, которые вы извлекаете из файла XAP, являются сборками.

Надеюсь, это поможет ...

Крис

...