Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Просмотр исходников .Net библиотек


Автор: V0fka 20.8.2013, 17:40
Привет!

Есть 2 среды разработки: Visual Studio 2012 и Sharp Developer. Так вот, если в Визуал Студио перейти к определению типов Net, то открывается окно, где видно сигнатуру типа. А если из Шарп Девелопера перейти к определению типа, то там видно не только сигнатуру, а и исходный код. То что из Шарп Девелопера видно исходники, я обнаружил сегодня случайно. В связи с этим вопрос: из Визуал Студио можно исходники смотреть?

Автор: diadiavova 20.8.2013, 20:00
Цитата(V0fka @  20.8.2013,  18:40 Найти цитируемый пост)
 из Визуал Студио можно исходники смотреть? 

Можно сделать исходники доступными для отладчика, но там не все библиотеки доступны. А вообще можно воспользоваться http://ilspy.net/.

Автор: V0fka 20.8.2013, 20:13
Цитата(diadiavova @  20.8.2013,  20:00 Найти цитируемый пост)
Можно сделать исходники доступными для отладчика, но там не все библиотеки доступны.

А можно узнать как? smile

Цитата(diadiavova @  20.8.2013,  20:00 Найти цитируемый пост)
А вообще можно воспользоваться ILSpy.

Я как-то смотрел утилитку ILDasm. Оно от ILSpy чем-то отличается?

Автор: diadiavova 20.8.2013, 20:58
Цитата(V0fka @  20.8.2013,  21:13 Найти цитируемый пост)
Я как-то смотрел утилитку ILDasm. Оно от ILSpy чем-то отличается? 

Илдазм - дизассемблер, а илспай - декомпилятор. Декомпилятор предоставляет код на шарпе, а илдазм на CIL.
Цитата(V0fka @  20.8.2013,  21:13 Найти цитируемый пост)
А можно узнать как? 

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

Автор: gambit 21.8.2013, 00:52
Я юзаю dotPeek, он хоть и отдельно от студии, но очень удобен.

Из платного - решарпер, он в студию интегрируется и исходники может показать в ней, но это не основная его фишка, а так приятный бонус.
Ну и гвоздь программы .NET Reflector, который после того, как внезапно стал платным, был позабыт, но его отличало, что он из il мог во многое сконвертить, в том числе и vb.net

Автор: diadiavova 21.8.2013, 09:44
Цитата(gambit @  21.8.2013,  01:52 Найти цитируемый пост)
Ну и гвоздь программы .NET Reflector, который после того, как внезапно стал платным

ILSpy появился на свет как раз в ответ на то, что рефлектор стал платным. Его разработчики с самого начала заявляли, что функционал будет доведён до уровня рефлектора. У него похожий интерфейс, да и на сегодняшний день он не хуже рефлектора, по крайней мере последней версии, которую я видел. К заметным недостаткам по сравнению с рефлектором можно отнести пожалуй только отсутствие такого количества плагинов. На вбнет он тоже код отображает, у рефлектора, кстати, с этим были некоторые проблемы и он порой выдавал синтаксически некорректный код.

Автор: gambit 21.8.2013, 10:22
Цитата(diadiavova @  21.8.2013,  09:44 Найти цитируемый пост)
ILSpy 

А как у него с baml, случайно не знаешь?

Автор: diadiavova 21.8.2013, 11:00
Цитата(gambit @ 21.8.2013,  11:22)
Цитата(diadiavova @  21.8.2013,  09:44 Найти цитируемый пост)
ILSpy 

А как у него с baml, случайно не знаешь?

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

Автор: V0fka 21.8.2013, 13:57
Цитата(diadiavova @  20.8.2013,  20:58 Найти цитируемый пост)
Там в настройках где-то галочку поставить надо, я не помню точно, поскольку исходники доступны только для шарпа, а я на нем пишу редко.

Нашел в настройках галку "Разрешить шаги в исходном коде .Net Framework". Поставил, студия попросила установить (или указать, не помню дословно) какие-то символы. Я перешел на соответствующую вкладку и нажал "ОК". Студия начала что-то грузить. Попробовал после этого Ф12 на методе Serialize типа XmlSerializer. В итоге ничего не поменялось и вижу только сигнатуру. Попробовал перезапустить студию. Результат не изменился. Попробовал в настройках Символов поставить галку в группе настроек "Места размещения символов \ Серверы символов Microsoft". Перезапустил студию, результат не изменился. Пробовал не по Ф12, а в режиме отладки Ф11 - но тоже эффекта ожидаемого не достиг. :(

Цитата(diadiavova @  20.8.2013,  20:58 Найти цитируемый пост)
Но илспай - то что надо, он, кстати для этих целей использует те же либы, что и шарпдевелоп. И вообще этот проект  и создавался в рамках проекта шарпдевелоп, так что получишь ровно то же самое, что ты видел там.

Спасибо за прогу! Посмотрел, на первый взгляд прикольно, буду пользоваться smile . Но для меня было бы вообще супер, если б можно было то же самое смотреть из студии.

Цитата(gambit @  21.8.2013,  00:52 Найти цитируемый пост)
Я юзаю dotPeek, он хоть и отдельно от студии, но очень удобен.

Тоже посмотрю, спасибо! Но, как писал выше, было бы вообще супер, если б можно было из студии смотреть с помощью стандартных возможностей либо каких-то бесплатных инструментов.

Автор: diadiavova 21.8.2013, 14:48
V0fka, все эти твои ф12 мне ни о чём не говорят, скорей всего у меня студия по другому настроена, так что пиши какую функцию запустил, а не шорткат, которым ты её вызвал. Исходники доступны в режиме пошаговой отладки, просто отладчик будет проходиться по ним также как по твоему коду, а из браузера объектов доступа нет. Кроме того можно просмотреть код, вызвав функцию "Перейти к определению" из контекстного меню.
В студию илспай не интегрируется, но я просто добавил её в меню "сервис" как внешний инструмент, откуда он прекрасно запускается.

Автор: V0fka 21.8.2013, 15:07
diadiavova, ф12 - у меня это "Перейти к определению". ф11 - это "Шаг с заходом". Т.е. в студии жму "Перейти к определению", получаю примерно такое:

Код

using System;
using System.CodeDom.Compiler;
using System.IO;
using System.Reflection;
using System.Runtime;
using System.Security.Policy;
using System.Xml;

namespace System.Xml.Serialization
{
    // Сводка:
    //     Сериализует и десериализует объекты в документы XML и из них.System.Xml.Serialization.XmlSerializer
    //     позволяет контролировать способ кодирования объектов в XML.
    public class XmlSerializer
    {
        // Сводка:
        //     Инициализация нового экземпляра класса System.Xml.Serialization.XmlSerializer.
        protected XmlSerializer();
        //
        // Сводка:
        //     Initializes a new instance of the System.Xml.Serialization.XmlSerializer
        //     class that can serialize objects of the specified type into XML documents,
        //     and deserialize XML documents into objects of the specified type.
        //
        // Параметры:
        //   type:
        //     Тип объекта, который может быть сериализован данным System.Xml.Serialization.XmlSerializer.
        [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
        public XmlSerializer(Type type);
        //
        // Сводка:
        //     Инициализирует экземпляр класса System.Xml.Serialization.XmlSerializer с
        //     помощью объекта, сопоставляющего один тип с другим.
        //
        // Параметры:
        //   xmlTypeMapping:
        //     System.Xml.Serialization.XmlTypeMapping, сопоставляющий один тип с другим.
        public XmlSerializer(XmlTypeMapping xmlTypeMapping);
...


Т.е. вижу только сигнатуру.

Когда жму в отладке "Шаг с заходом" в строке с вызовом метода Serialize типа XmlSerializer, то перехожу на следующую строку и никуда в другое место отладчик не идет.

Цитата(diadiavova @  21.8.2013,  14:48 Найти цитируемый пост)
В студию илспай не интегрируется, но я просто добавил её в меню "сервис" как внешний инструмент, откуда он прекрасно запускается.

Ну и оттуда просто открываешь его и руками выбираешь какой класс смотреть? Или можно сделать, чтобы оно само подхватывало как-то из текущей строки?  Или я много хочу? smile

Автор: diadiavova 21.8.2013, 15:22
Цитата(V0fka @  21.8.2013,  16:07 Найти цитируемый пост)
Т.е. вижу только сигнатуру

Попробуй другой класс в другой библиотеке, но вообще, как я уже сказал, я этим чудом не пользуюсь, так что подробно описать не могу.
Цитата(V0fka @  21.8.2013,  16:07 Найти цитируемый пост)
Или я много хочу? 

Видимо да. 

Автор: V0fka 21.8.2013, 17:45
В общем я понял, буду вырабатывать привычку смотреть это не в визуал студио.

diadiavova, gambit, спасибо за ответы!

Автор: V0fka 23.8.2013, 09:51
Посмотрел dotPeek. Для меня, как для неискушенного пользователя, подходят и ILSpy и dotPeek smile . Буду иметь в арсенале два инструмента smile .

diadiavova, gambit, ещё раз спасибо за ответы!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)