A partire da ora sto usando un po 'di generazione di codice, solitamente in combinazione con classi parziali. Fondamentalmente la configurazione è la seguente:Fornire un suggerimento a IntelliSense che una classe parziale non dovrebbe essere modificata
- Classe parziale contenente codice generato. Alcuni di questo codice chiameranno metodi parziali. Il codice viene rigenerato molto tempo. Il generatore di codice è in alcuni casi uno strumento personalizzato.
- I metodi parziali vengono implementati manualmente in un file separato.
Il problema è che quando utilizzo le funzionalità di Intellisense come "metodo di generazione", per qualche motivo vengono generate nel file contenente il codice generato. Ovviamente non lo voglio
La mia domanda è: è possibile generare qualche suggerimento che dice a Intellisense che non dovrebbe toccare certi file "cs" (ma invece l'altra classe parziale)?
Aggiornamento
Col senno di poi avrei notato che sto usando uno strumento personalizzato per generare il codice. Non è un EF o una trasformazione semplice; c'è un po 'di logica nella generazione del codice. Inoltre, genera uno spazio dei nomi completo e una struttura di classe con classi parziali. Lo 'spazio dei nomi radice' si trova estraendolo dal file csproj
e quindi usando la struttura delle cartelle per capire lo spazio dei nomi assoluto (è simile a come lo fa Linq2sql).
La risposta suggerita da xanatos (grazie!) Funziona: intellisense ordina la sua operazione sul nome, quindi ordina alfabeticamente il nome e quindi seleziona il primo elemento nell'elenco. Ciò significa che è possibile generare un zzzz.foo.cs
che (anche se un po 'brutto) funzionerà bene. Ho appena eseguito alcuni esperimenti e ho scoperto che la funzione find all references
restituisce l'ordine che VS sembra utilizzare. A quanto pare, funziona così:
Supponiamo che tu abbia uno strumento personalizzato che funzioni sul nome file foo.bar
e lo trasformi in foo.cs
. Lo strumento personalizzato genererà il contenuto come stringa e lo riporterà a Visual Studio (è così che funzionano gli strumenti personalizzati ...). Il risultato sarà in un file chiamato foo.cs
.
Ora, sono stato molto sorpreso di fondare che IntelliSense non non sorta come foo.cs
ma piuttosto come foo.bar\foo.cs
. In altre parole: indipendentemente dal nome dell'output "cs" nel tuo strumento personalizzato, devi rinominare il file di base foo.bar
in qualcosa come zoo.bar
.
Mentre quello potrebbe essere una soluzione, sono esitante ad accettarlo come risposta, perché dovrei dare file nel mio progetto strani nomi (i nomi hanno significato ...). Inoltre, alcuni dei miei strumenti personalizzati dipendono dai loro nomi di file, in modo tale da essere anche danneggiati ...
Pertanto, sono ancora aperto per suggerimenti su come risolvere questo problema correttamente.
Quindi, in pratica, quello che stai dicendo è che utilizza il percorso completo .... Avevo già paura di questo: alcuni dei miei generatori (per esempio il mio generatore di codice lexer/parser) produce completo (spazio dei nomi figlio) gerarchie di classi in un unico file generato. Fondamentalmente ciò significa che non importa come lo chiamo, genererà il codice nel file sbagliato. – atlaste
@atlaste C'è sempre il file 'z.z.z.zenerated.cs' :-) – xanatos
Sì, ci ho pensato anche io - il problema è che quella soluzione non funziona se ordina la cartella corrente sopra le sottocartelle. Dovrò provarlo però. – atlaste