2009-05-21 13 views
24

Ho uno script che convertirà un file di testo in un file di risorse, in modo che possa avere più supporto di lingua avendo file di testo per lingue diverse convertiti in risorse diverse. Una volta eseguito lo script per ottenere il file resx, devo quindi eseguire uno strumento di creazione personalizzato (come descritto qui: Link to Code Project) per creare i file Designer.cs per utilizzare i nuovi file.Eseguire uno strumento personalizzato di Visual Studio in fase di compilazione

In linea con la filosofia secondo cui dovrei essere in grado di creare l'intero progetto con un solo clic, come posso rimuovere il passaggio in cui devo chiamare esplicitamente lo strumento di creazione personalizzato per creare i file codebehind?

Ho provato a eliminare automaticamente i file Designer.cs come fase di pre-costruzione, poiché penserei che lo strumento di creazione personalizzata si avvierebbe automaticamente se non ci fossero file Designer.cs, ma senza dadi.

Quindi, voglio che il mio script di build in Visual Studio/MSBuild da fare: 1) convertire il testo in ResX (fatto) 2) spostare resx di directory appropriata (fatto) 3) creare file designer.cs utilizzando uno strumento di generazione personalizzata (non fatto)

E 'che l'ultimo passo ...

risposta

3

Purtroppo non credo ci sia un modo semplice di fare questo. Gli strumenti di personalizzazione vengono eseguiti solo da VS.NET - non vengono eseguiti quando si crea il progetto utilizzando MSBuild dalla riga di comando.

In generale, se si ha la possibilità di scrivere uno strumento di compilazione come strumento di costruzione cliente o un'attività di MSBuild, scegliere l'attività MSBuild ogni volta che queste attività verranno eseguite in VS.NET e dalla riga di comando.

I file designer.cs per risorse sono lì per supportare la codifica. Ti danno l'accesso fortemente digitato nel file di risorse. Pertanto, se crei le risorse di invarianza della cultura in VS.NET (e consenti la creazione dei file .designer.cs), l'aggiunta di ulteriore supporto per la lingua in un secondo momento (file .resx aggiuntivi) dovrebbe funzionare correttamente.

Se, tuttavia, i file di testo sono i file di risorse primari e si aggiungono prima le nuove stringhe di risorse in questi file di testo, sarà necessario trovare un altro modo per generare file .cs che consentano di codificare contro quelle risorse. Se AVEI, generare il file .designer.cs da solo (o qualcosa di simile) non sarebbe poi così difficile. Usando CodeDom o T4 puoi creare la classe helper, usando un file .designer.cs esistente come modello.

0

Hai provato ad aggiungere un passaggio Exec nel passaggio Before/AfterBuild in csproj? Devi modificare manualmente il file per questo, ma questo dovrebbe risolvere il tuo problema.

Non sono completamente chiaro se si desidera eseguire questo prima o dopo la compilazione. Se hai bisogno di farlo prima o dopo Pass1/Pass2, puoi agganciarti direttamente ai bersagli. Prova a cercare in Microsoft.Build.Common.Targets per avere un'idea di come farlo.

2

C'è un modo per generare * .Designer.cs per * .resx come parte del processo di compilazione. Esiste un'attività incorporata MSBuild GenerateResource, che fondamentalmente è un wrapper attorno allo strumento SDK resgen.exe. Here puoi trovare un esempio su come usarlo.

Un'altra cosa che si dovrebbe trovare utile, se la versione .Designer.cs generato * non è corretto, in fondo, il compito GenerateResource non sta chiamando la versione desiderata di Resgen.exe, impostando la proprietà SdkToolsPath potrebbe aiutarvi.

Problemi correlati