![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| csprogrammer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 3.4.2006 Репутация: нет Всего: нет |
Занимаюсь анализом сборок. Использую Reflection.Assembly. Составляю список описанных классов при помощи GetTypes(). Хотелось бы, для каждого класса, узнать, является ли его BaseType библиотечным классом или нет. Возможно ли это?
P.S. Под библиотечными классами подразумеваются стандартные классы .NET |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Ну, смотри его BaseType.Assembly и проверяй имя библиотеки...
|
|||
|
||||
| csprogrammer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 3.4.2006 Репутация: нет Всего: нет |
Была у меня такая мысль. Тока к сожалению там кроме mscorlib ещё куча всяких библиотек. Я так понял каждый namespace это отдельный assembly. Что же мне теперь составлять список всех namespace?
|
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Нет, не каждый. Библиотек там всего штук 15. Несколько по памяти -- mscorlib.dll, System.dll, System.Windows.Forms.dll, System.Web.dll, Microsoft.VisualBasic.dll, System.Data.dll, больше не помню
|
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Ну а нельзя ли получить полное имя библиотеки и проверить, не лежит ли она в одной из подпапок %WINDIR%\Microsoft.NET\Framework ?
-------------------- Да. Именно так. |
|||
|
||||
| csprogrammer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 3.4.2006 Репутация: нет Всего: нет |
2 Exception: Спасибо. Думаю на этом варианте и надо будет остановиться. Действительно стандартных библиотечных файлов не так уж их и много. Правда с каждой новой версией framework список придётся пересматривать. Я бы конечно предпочёл иметь какой-нить атрибут Standard или что либо в этом роде, но увы такого нет.
2 Дрон: А программер если захочет туда разве свою библиотеку положить не сможет? |
|||
|
||||
| Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Может. Но зачем? А вообще да, получается что надо хранить список.
А нет его потому, что это не имеет никакого смысла Какая в итоге разница -- стандартная это библиотека или нет? -------------------- Да. Именно так. |
||||
|
|||||
| csprogrammer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 3.4.2006 Репутация: нет Всего: нет |
Боюсь свалиться в офтопик, но в кратце так: кому то разницы никакой, а кому то есть. Хочу проанализировать зачем класс может быть использован. Для этого неплохо иерархию просмотреть. Но не всю, а до того момента где начинаются стандартные классы, их то анализировать не надо, с ними и так всё ясно.
|
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Я просто имел ввиду, что между ними нет разницы в смысле реализации и использования. Т.е. технически ты НИКАК не отличишь стандартный класс от своего собственного. Да, разработчики могли бы ввести какой-то специальный атрибут, чтобы отмечать стандартные классы. Но опять же зачем? В любом случае при использовании какого-то класса ты не заметишь разницы между ними. ЗЫ: А насчёт того, что "кому-то есть"... То тут я согласен -- есть. Например при профилировании приложения нет большого смысла рассматривать внутренности стандартных классов. -------------------- Да. Именно так. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Дык, это... А в чём проблема ? Смотрим атрибуты аssembly, в частности AssemblyCompany, если находим строку "Microsoft Corporation" - значитцо это системная сборка, и любой класс в ней - системный (aka стандартный). -------------------- ![]() |
|||
|
||||
| csprogrammer |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 3.4.2006 Репутация: нет Всего: нет |
2 Дрон:
Ды вот в том то вся и проблема, что между ними разницы никакой! Была бы между ними какая-нить разница я бы не спрашивал как их друг от друга отличить 2 mr.DUDA: Благодарю за ещё один способ решения проблемы, но боюсь мне он не подойдёт. Для любого assembly можно сделать следующее: Project->Project Properties->Assembly Information и дальше указать любое значение атрибута AssemblyCompany. А мне принципиально важно чтобы мой assembly анализатор было не так просто одурачить. Я даже уже наверное сам запутался чего бы я хотел, т.к. я сам про атрибут заикнулся:
|
||||
|
|||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
mr.DUDA, ни-ни
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Можно попробовать подписку поюзать. Все эти assembly подписаны одним ключом. -------------------- ![]() |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
||||
|
||||
| csprogrammer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 3.4.2006 Репутация: нет Всего: нет |
Ваще мне в данном случае главное не анализировать то к чему есть документация. Так что можт это даже и хорошо что не только фреймворковские библиотеки будут определяться. А не подскажете что за зверь подписка и где про неё почитать?
Добавлено @ 17:50 А, понял, это в смысле то чем занимается утилита signtool.exe. Спасибо попробую. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |