Rider – кроссплатформенная IDE для платформы .NET, основанная на платформе IntelliJ (написанной на языках программирования Java и Kotlin), которая использует движок ReSharper (написанный на C#) для анализа .NET-кода.
В процессе разработки на .NET часто хочется сравнить версии скомпилированных программ (иногда это зависимости нашей программы, иногда — наши собственные бинарные файлы, для которых хочется понять, какой версии кода соответствует какой-либо из ранее опубликованных бинарников).
В платформе IntelliJ уже реализована возможность сравнения произвольных каталогов, на диске, а также архивов; в среде разработки IDEA есть также возможность сравнивать JAR-файлы, подсвечивая разницу между декомпилированными версиями Java-классов внутри них. Но для .NET такая возможность пока отсутствует.
Задача состоит в том, чтобы добавить возможность сравнения скомпилированных .NET-сборок (файлов с расширениями .dll и .exe) в Rider, пользуясь при этом уже реализованной функциональностью в платформе IntelliJ, и возможностями по декомпиляции, предоставляемыми платформой ReSharper.
Сборка в .NET — это коллекция типов и ресурсов, собранных для совместной работы и образующих логически функциональную единицу. Сборки могут быть созданы из одного или нескольких файлов исходного кода. Для простоты понимания, о них можно думать как об архивах, которые имеют определенную структуру и, в частности, содержат данные об исходном коде. Обычно скомпилированная сборка представлена на диске в виде файла с расширением .exe или .dll.
Наша задача — научиться показывать разницу между двумя сборками. Она делится на три ключевые подзадачи:
Некоторые части (подсчёт разницы между файлами, декомпиляция сборок в C#-код) уже реализованы в платформах IntelliJ и ReSharper, так что в рамках этой задачи нужно будет написать полноценный модуль к Rider, который сможет, используя возможности платформ, реализовать данную задачу, и отобразить разницу в UI.
Предстоит писать код на языках Kotlin и C#, и объединять данные с помощью специального протокола, по которому разные компоненты общаются в Rider.
Чем эта задача может быть вам интересна :).
Вопросы по проекту можно присылать на ivan.migalev@jetbrains.com