Questa nota prende a piene mani dal corso From Zero to Hero: JetBrains Rider.
Shortcut
Big Three
Ci sono centinaia di shortcut ma i piĂš usati son:
Ctrl + T: ricerca di qualsiasi cosa, anche settingsAlt + Enter: triggera il suggerimento di fix o refactorAlt + Ins: apre menu a tendina per creare costruttore, metodi, override e cosĂŹ via
Others
Ctrl + Alt + S: apre la finestra dei settingCtrl + Tab: permette di passare da un file allâaltro tra i file apertiF12: entra nella definizione di un metodo. Analogo aCtrl + ClickShift + F12: mostra i chiamanti di un metodoAlt + Home: vai al metodo della superclasseAlt + End: vai allâoverride del metodo, se esisteAlt + up/down: passa da un metodo allâaltro in un fileCtrl + Alt + Shift + up/down: sposta un metodo prima/dopo il precedente/successivoCtrl + -: permette di passare alla posizione precedente, sia che sia in un file dove ero prima con il cursore sia che sia nel file visualizzato precedentemente. Analogo alla freccia âindietroâ a grafica.Ctrl + G: go to lineCtrl + Shift + R: apre il menu di refactor dellâoggettoCtrl + Alt + Shift + A: ispeziona il metodo- Incoming calls: versione piĂš potente di
Shift + F12dove si vede una specie di call stack di tutti i chiamanti del metodo e dei chiamanti dei chiamanti e cosĂŹ via
- Incoming calls: versione piĂš potente di
Ctrl + Shift + F: find in filesCtrl + Shift + H: replace in filesAlt + E: preserve case
Ctrl + R + R: rinomina oggettoCtrl + R + S: modifica la signature di un metodoCtrl + R + M: estrae il codice selezionato in un metodoCtrl + Shift + Enter: crea le parentesi dopo unifo dopo un ciclo e sposta il cursore allâinternoCtrl + E + C: apre la finestra per il cleanup del file o progetto, quindi sistema using, tab, spazi e cosĂŹ via.
Bookmarks
I bookmarks permettono di contrassegnare linee di codice specifiche per un rapido accesso e navigazione. Consentono quindi di poter passare molto velocemente da una riga allâaltra nel codice che sto sviluppando permettendomi cosĂŹ di essere molto piĂš efficace e produttivo. Esistono due tipi di segnalibri: mnemonici, identificati da numeri o lettere, e anonimi, senza identificatori. Ogni bookmark può essere rinominato in modo da avere chiaro ognuno a cosa punta.
Shortcut
Ctrl+KK: Toggle bookmark in una riga di codice;Ctrl+KW: Apre una piccola finestra di gestione dei bookmarks e permette di passare da uno allâaltroAlt+2: Apre la finestra di gestione dei bookmarks/breakpoint;Ctrl+Shift+[0-9]: Toggle bookmark mnemonico con il numero indicato;Ctrl+[0-9]: Vai al bookmark mnemonico con il numero indicato.
Debugging
Ispezionare LINQ concatenate
La combinazione Alt + Click su una variabile o unâespressione ti permette di Valutare rapidamente il valore di una variabile o anche di unâintera espressione direttamente nel codice, senza aprire manualmente la finestra di valutazione.
Quando lavori con espressioni LINQ complesse (es. .Where(...).Select(...).OrderBy(...)), usare Alt + Click è comodissimo per vedere il risultato parziale di ogni step nella catena (es. solo il Where, solo il Select, ecc.).
[DebuggerDisplay]
Lâattributo [DebuggerDisplay] ti permette di personalizzare come viene mostrato un oggetto nel debugger, rendendo il debug piĂš chiaro e leggibile.
[DebuggerDisplay("User: {Name}, Age: {Age}")]
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}Quando fermi il debugger su un oggetto User, invece di vedere solo il nome della classe, vedrai ad esempio:
User: Alice, Age: 30
Freeze Threads
Nel debugger di Rider, usare âFreeze Threadâ ti permette di bloccare lâesecuzione di un thread specifico, lasciando che gli altri continuino. Questo è utile quando vuoi analizzare lo stato esatto di un thread senza che cambi sotto i tuoi occhi, soprattutto in situazioni di concorrenza.
Al contrario, âFreeze Other Threadsâ congela tutti gli altri tranne quello attivo, cosĂŹ puoi focalizzarti su un singolo flusso di esecuzione senza interferenze. Ă molto utile per capire il comportamento in scenari multithread complessi, dove i problemi sono spesso legati alla sincronizzazione o allâordine delle operazioni.
Lo posso fare nella finestra di debugging quando sono fermo su un breakpoint facendo tasto destro sul thread in questione.

Set data breakpoint
âSet Data Breakpointâ ti permette di dire al debugger: âFermati quando questo valore cambia.â
Ă utile quando non sai dove o quando una variabile viene modificata, ma vuoi scoprirlo.
Funziona solo su campi di istanza (non variabili locali) e Rider interromperĂ lâesecuzione appena quel campo cambia, mostrandoti chi lâha modificato e in quale contesto.
Perfetto per bug misteriosi dove âqualcosa cambia ma non so doveâ.
Per impostarlo:
- Avvia il debugging
- Fermati in un punto in cui hai accesso allâistanza dellâoggetto che contiene il campo (ad esempio in una watch o nella finestra locals).
- Nella finestra di Variables (o Watches/Locals), trova il campo che vuoi monitorare (es:
account.Balance). - Fai click destro sul campo â seleziona âSet Data Breakpointâ.

Git
TODO
Tests
Shortcut
Ctrl + U + L: lancia tutti i test nella soluzioneCtrl + U + F: lancia tutti i test falliti della scorsa run
Test Session
Se voglio concentrarmi su un sottoinsieme di test particolare posso creare una nuova âTest Sessionâ facendo tasto dx su un oggetto nella tab dei test e Create New Session; questo aprirĂ una nuova tab con i test selezionati. A questi posso aggiungerne altri con sempre con tasto dx e Append Tests to Session.
Continuous Testing
In alcuni casi può essere utile avere i test che continuano a girare durante lo sviluppo del codice in modo che sia chiaro subito se sto rompendo qualcosa o invece se lo sto sistemando.
Ovviamente questo appesantisce comunque lâIDE quindi ha senso non farlo su tutti i test ma solo su un loro sottoinsieme rilevante per me.
Per farlo basta selezionare i test in questione e premere Set|Append Selected Tests To Continuous Testing Session. Questo aprirĂ una nuova tab con solo i test selezionati e questi verranno lanciati ogni volta che si salva il file.
Per abilitare che si lanciano al salva andare nei setting e cercare Trigger Continuous Testing on -> Save.
Flaky Tests
Può succedere di avere test che hanno risultati non sempre definiti, a volte falliscono ma in situazioni non chiare (esempio in ambienti di multithreading).
Molto utile in questi casi il comando Run/Debug Unit Tests Until Fail che, come dice il nome, continua a lanciare il test fino a quando fallisce.
Diff tra file generati dai test
Se il test genera dei file posso mostrare nellâinterfaccia dei risultati dei test un comodo diff che apre il difftool di rider. Vedi: https://www.jetbrains.com/help/rider/Analyze_test_results.html#compare-files-from-test-output
Dependency Diagram
Project Dependency Diagram
Permettono di visualizzare lâalbero delle dipendenze di un determinato progetto.
Abilitando la âcoupling analysisâ viene analizzato anche se una dipendenza è davvero necessario o si può rimuovere, come nellâesempio sotto dove IMAMultilanguage è una dipendenza di IMAUser ma non necessaria.

Type Dependency Diagram
Permette di visualizzare la dipendenza tra i tipi di un determinato progetto o anche solo di alcune classi.
A differenza del Project Diagram questo può anche partire da un singolo tipo e poi si può fare drag and drop dei tipi che si vogliono analizzare. Ha quindi vari livelli di scope.
Anche quando si fa il Find Usages o il Show Derived types si può cliccare sullâicona pr mostrare tali dipendenze in questo diagramma.
Alcune shortcut comode:
Ctrl+Mouse Wheel: zoomAlt: area zoomCtrl+Click: panClick: show usages
HTTP Client integrato
LâHTTP Client si basa su file .http o .rest che contengono le definizioni delle richieste HTTP. Questi file sono semplici file di testo con una sintassi intuitiva per specificare il metodo HTTP/GRPC, lâURL, gli header, il corpo della richiesta e altre opzioni.
Quando esegui una richiesta da questi file (tramite un pulsante âPlayâ che compare accanto ad essa), Rider invia la richiesta e visualizza la risposta in una finestra dedicata, completa di stato, header e corpo della risposta.
### Get a list of posts
GET https://jsonplaceholder.typicode.com/posts
### Create a new post
POST https://jsonplaceholder.typicode.com/posts
Content-Type: application/json
{
"title": "foo",
"body": "bar",
"userId": 1
}Cosa sono gli Environment
Gli environment (ambienti) sono un concetto fondamentale per gestire diverse configurazioni delle richieste, ad esempio per sviluppo, staging e produzione. Invece di modificare manualmente lâURL di base o le chiavi API ogni volta, puoi definire variabili specifiche per ciascun ambiente.
Per esempio, potresti avere un ambiente âDevelopmentâ con {{baseUrl}} = http://localhost:8080 e un ambiente âProductionâ con {{baseUrl}} = https://api.yourcompany.com. Nel tuo file .http, useresti GET {{baseUrl}}/users e al momento dellâesecuzione potresti selezionare lâambiente desiderato dal dropdown in alto.
Gli environment sono definiti in file .env o .private.env (per variabili sensibili che non dovrebbero essere committate nel controllo versione) e possono contenere coppie chiave-valore. Rider supporta anche variabili dinamiche e la possibilitĂ di includere file esterni.
Remote development
Lâidea è delegare ad un server remoto la parte di calcolo e avere in locale solo unâIDE leggero che può girare anche su un PC con scarse performance. Step per lâinstallazione:
- Installa OpenSSH Server sulla VM Windows: per prima cosa, dovrai abilitare le connessioni SSH sulla tua VM Windows. Scarica lâinstaller di OpenSSH Server dal repository ufficiale di GitHub. Puoi trovarlo qui: https://github.com/PowerShell/Win32-OpenSSH/releases. Esegui lâinstaller sulla tua VM.
- Configura il Firewall di Windows: dopo lâinstallazione di OpenSSH, è fondamentale assicurarsi che il firewall di Windows consenta le connessioni in entrata sulla porta 22, che è la porta standard per SSH. Aggiungi una regola in entrata per permettere queste connessioni.
- Verifica il Funzionamento di SSH: per confermare che il server SSH sia configurato correttamente e in ascolto, puoi utilizzare telnet dal tuo computer locale. Apri un prompt dei comandi o PowerShell e digita
telnet <IndirizzoIPdellaVM> 22. Se la connessione ha successo (vedrai una schermata vuota o un messaggio di benvenuto), significa che SSH è attivo sulla VM. - Scarica JetBrains Toolbox App sul Tuo PC Locale: sul tuo computer locale, scarica e installa la JetBrains Toolbox App.
- Stabilisci la Connessione SSH tramite JetBrains Toolbox: apri la JetBrains Toolbox App sul tuo PC locale. Premi
Alt + 2per accedere alla sezione SSH. Qui, inserisci il lâindirizzo IP e le credenziali per la VM Windows. Ă normale che la fase di âconnectingâ duri circa 10 minuti; sii paziente. - Installazione di Rider sulla VM Remota: una volta stabilita la connessione, seleziona âRiderâ dallâelenco. La JetBrains Toolbox installerĂ una versione di Rider (un âbackendâ headless) sulla VM remota e un client leggero (JetBrains Client) sul tuo PC locale, solitamente in
\AppData\. Questo client locale è lâinterfaccia con cui interagirai, mentre tutte le operazioni pesanti avvengono sulla VM. - Clonazione di Progetti e Inizio Sviluppo: dalla JetBrains Toolbox App, apri JetBrains Rider. Inizialmente, non vedrai alcun progetto. Utilizza lâopzione âClone from Repoâ e fornisci le credenziali per il tuo provider di repository. Il progetto verrĂ clonato sulla VM remota, tipicamente in
C:\Users\<nomeutente>\RiderProjects. - Gestione dei File di Compilazione: è importante notare che tutti i file di compilazione, i file temporanei e i risultati del processo di build saranno creati e gestiti interamente sulla VM remota. Il tuo PC locale non archivierà alcun file relativo alla compilazione.
Applicazioni con interfaccia grafica
Quando avvii una connessione SSH con JetBrains Gateway (o il Toolbox App), la macchina remota ospita un backend di Rider che viene eseguito in modalitĂ headless. Ciò significa che non ha unâinterfaccia utente grafica. Questo backend si occupa di tutte le operazioni intensive come lâindicizzazione del codice, la build, il debug e lâanalisi.
Sulla tua macchina locale, invece, gira un client leggero (JetBrains Client). Questo client ti fornisce lâinterfaccia utente completa dellâIDE, ma comunica costantemente con il backend sulla VM remota tramite un protocollo RPC dedicato.
Un aspetto cruciale da ricordare è che questo flusso non include il forwarding delle finestre di applicazioni grafiche. Ciò significa che se il tuo codice dovesse tentare di visualizzare una finestra (ad esempio, chiamando ShowDialog() o aprendo qualsiasi finestra WPF), questa operazione verrebbe eseguita nella sessione remota senza un display e non verrebbe visualizzata sul tuo client SSH locale lanciando unâeccezione di Impossibile visualizzare un form o una finestra di dialogo modale quando l'applicazione è in esecuzione in una modalitĂ diversa da UserInteractive.
Integrazione con database
Rider ha un gestore di DMBS integrato.
Nella sezione Database -> Connect to database e inserire i dati necessari.
Nella finestra della gestione database di fianco agli oggetti câè un piccolo quadratino con scritto, esempio â1 su 6â.
Cliccandoci sopra posso modificare lâoggetto che sto visualizzando.
Facendo doppio click sullâoggetto del database posso visualizzarlo e inoltre:
- Aggiungere un filtro sopra le colonne stile Excel
- Visualizzare grafici sui dati impostando asse X e Y
- Visualizzare uno o piĂš righe come record in unâinterfaccia ad hoc
Attach Data Source
Una funzionalità molto potente è poter lavorare con il syntax highlight e intellisense sulle query anche in un file non .sql ma, esempio, un normale file .NET.
Per fare questo fare tasto dx sulla query e premere Attach Data Source
In alto a dx comparirĂ una combobox per selezionare il database e lo schema a cui appartiene tale query e questo permette di avere lâintellisense e il syntax highlight.

Terminal
Su Rider posso avere uno o piĂš finestre terminali, sia cmd classico che Powershell.
Posso aprire direttamente la finestra oppure fare tasto dx -> Open In -> Terminal.
Di default non viene visualizzata lâestetica custom della PowerShell di sistema (esempio se si utilizza Oh My Posh come plugin. Per abilitare tale estetica fare tasto dx -> Prompt Style -> Shell Prompt (PS1)).

Tips & Tricks
- Preserve case: spesso devo fare un replace di una stringa con un altra ma tale stringa potrebbe avere vari case diversi, esempio
handlereHandlere vorrei che il case venisse preservato. Nella finestra di replace (Ctrl + Shift + H) se premoAlt + E(o lâincona con due âAâ a destra della textbox di replace) il replace preserverĂ il case originario - Local History: Rider tiene traccia di tutte le modifiche che sono avvenute in un file o in un progetto in delle sue strutture dati e le mantiene per 5 giorni (modificabili sa setting). Questo può essere utile se non ho git oppure se ho fatto troppe modifiche tra un commit e lâaltro e temo di aver perso qualcosa. Data una modifica posso anche crearne facilmente una patch in modo che sia condivisibile con altri componenti del team.