Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как достать assembly из xap-файла? / 3 сообщений из 3, страница 1 из 1
24.11.2011, 05:32
    #37541711
tplink
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как достать assembly из xap-файла?
Приветсвую.
Мне нужно на клиентской стороне достать assembly одной dll-ки которая находится внутри xap-файла. Метод
Assembly assembly = Assembly.GetExecutingAssembly(); не подходит так как возвращает assembly текущего проекта.

Сейчас делаю так:
Скопировал эту библиотеку в папку ClientBin, и от туда тяну клиенту:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
...
System.Net.WebClient wc = new WebClient();
 wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
 wc.OpenReadAsync(new Uri(myFileName, UriKind.Relative), "GET");
...

 void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                 Assembly assembly = loadAssembly(e.Result);
                    if (assembly != null)
                    {
                        object[] versionAttributes = assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false);
                        if (versionAttributes != null && versionAttributes.Length > 0)
                            tbVersionTxt.Text = string.Format(Properties.Resources.ABOUT_VERSION, ((AssemblyFileVersionAttribute)versionAttributes[0]).Version);
                    }
 
            }
        }


 private Assembly loadAssembly(Stream s)
        {
                string className = (myClassName);
                AssemblyPart ap = new AssemblyPart();
                Assembly a = ap.Load(s);
                return a;
        }

Думал вариант загрузить xap-файл клиенту, достать эту библиотеку. Но при обращении к xap-файлу генерится экспешн access denied. И как его распаковать?
Пожалуйста, посоветуйте как сделать лучше?
...
Рейтинг: 0 / 0
24.11.2011, 06:09
    #37541714
tplink
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как достать assembly из xap-файла?
Нашел способ как распаковывать xap-файл: http://hackingsilverlight.blogspot.com/2009/12/hacking-silvelright-xap-file.html
Решение:
1. Добавил класс Unzipper
2. Изменил wc_OpenReadCompleted:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void wc_OpenReadCompleted(object sender, System.Net.OpenReadCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                UnZipper unzip = new UnZipper(e.Result);
                foreach (string filename in unzip.GetFileNamesInZip())
                {
                     if (filename == (myFileName)
                    {
                       Assembly assembly = loadAssembly(unzip.GetFileStream(filename));
                       if (assembly != null)
                       {
                           object[] versionAttributes = assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false);
                           if (versionAttributes != null && versionAttributes.Length > 0)
                               tbVersionTxt.Text = string.Format(Properties.Resources.ABOUT_VERSION, ((AssemblyFileVersionAttribute)versionAttributes[0]).Version);
                       }
                    }
                }
Но при этом получается что каждый раз этот 5 мб ный xap-файл копируется клиенту...не красиво...
...
Рейтинг: 0 / 0
24.11.2011, 08:10
    #37541738
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как достать assembly из xap-файла?
А в чем смысл всех этих мультиков?
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как достать assembly из xap-файла? / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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