Internships
Register
Copyright © 2000—2025 JetBrains s.r.o.

Difference for .NET assemblies / DLL files

Description

Rider – кроссплатформенная IDE для платформы .NET, основанная на платформе IntelliJ (написанной на языках программирования Java и Kotlin), которая использует движок ReSharper (написанный на C#) для анализа .NET-кода.

В процессе разработки на .NET часто хочется сравнить версии скомпилированных программ (иногда это зависимости нашей программы, иногда — наши собственные бинарные файлы, для которых хочется понять, какой версии кода соответствует какой-либо из ранее опубликованных бинарников).

В платформе IntelliJ уже реализована возможность сравнения произвольных каталогов, на диске, а также архивов; в среде разработки IDEA есть также возможность сравнивать JAR-файлы, подсвечивая разницу между декомпилированными версиями Java-классов внутри них. Но для .NET такая возможность пока отсутствует.

Задача состоит в том, чтобы добавить возможность сравнения скомпилированных .NET-сборок (файлов с расширениями .dll и .exe) в Rider, пользуясь при этом уже реализованной функциональностью в платформе IntelliJ, и возможностями по декомпиляции, предоставляемыми платформой ReSharper.

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

Наша задача — научиться показывать разницу между двумя сборками. Она делится на три ключевые подзадачи:

  1. Так как сборка может состоять из нескольких исходных файлов и имеет определенную структуру — разобрать из чего она состоит и найти в ней те объекты, которые различаются и содержат исходный код.
  2. Декомпилировать их обратно в С# код (потому что в сборках они будут представлены в виде промежуточного IL-кода).
  3. Посчитать и отобразить разницу.

Некоторые части (подсчёт разницы между файлами, декомпиляция сборок в C#-код) уже реализованы в платформах IntelliJ и ReSharper, так что в рамках этой задачи нужно будет написать полноценный модуль к Rider, который сможет, используя возможности платформ, реализовать данную задачу, и отобразить разницу в UI.

Предстоит писать код на языках Kotlin и C#, и объединять данные с помощью специального протокола, по которому разные компоненты общаются в Rider.

Чем эта задача может быть вам интересна :).

  1. Она включает в себя полноценную “full-stack” разработку (как её понимают в команде Rider — где IntelliJ является фронтендом, а ReSharper бэкендом), то есть вы сможете позаниматься как написанием логики на бэкенде, так и красивым отображением на фронтенде.
  2. Это законченная фича, которая, в случае успешной реализации, будет использоваться в Райдере, как отдельная, самостоятельная функциональность.
  3. Это возможность разобраться с тем, как устроены .NET приложения изнутри и непосредственно использовать это в решении задачи.

Вопросы по проекту можно присылать на ivan.migalev@jetbrains.com

Requirements

  • Опыт написания промышленного кода или объемных учебных проектов.
  • C#, Kotlin (если вы никогда не писали на этих языках, но сможете быстро разобраться перед или во время стажировки, тоже подходит).
  • Общее представление о том, как устроен .Net.

Admission

Разработчики: Лето 2021

Mentor

Alexander Petrovsky, Alexander Ulitin, Evgeniia Onosovskaia, Ivan Migalev

Mentor's location

Remote

Product/Team

Rider

Tags

.NET
C#
Kotlin