16

Il problemaPasso dopo passo, come si aggiunge un passaggio personalizzato per ogni file di un determinato tipo in Visual Studio 2010?

  1. Ho un gruppo di file personalizzati in un progetto di Visual Studio 2010.
  2. Ho bisogno di eseguire uno strumento su quei file personalizzati quando cambiano.
  3. Lo strumento genera file .h inclusi dai file .cpp esistenti.
  4. Desidero che lo strumento venga eseguito come parte del processo di compilazione.
  5. È necessario eseguire da Visual Studio, ma idealmente potrebbe anche essere eseguito come parte di un processo di msbuild.

esistenti soluzioni sub-standard

Su ciascun file, ogni volta lo aggiungo, posso andare alle impostazioni del file, impostare il tipo di elemento per costruire su misura strumento, e poi nella generazione personalizzata Dialogo degli strumenti, impostazione dei parametri della riga di comando, impostazione delle uscite (codificate) e impostazione delle dipendenze aggiuntive (codificate).

Ovviamente, questa è una soluzione scadente perché è una quantità di lavoro non banale e soggetta a errori ogni volta che si aggiunge un nuovo file del tipo personalizzato.

La soluzione desiderata

Ho messo su Visual Studio che per qualsiasi file estensione .foo, corre strumento bar.exe, quando il file .foo cambiamenti, prima che si compila il codice CPP.

Le cose che mi hanno tentato

Sulla base di questo: http://msdn.microsoft.com/en-us/library/3e889s84(v=vs.100).aspx Ho tentato di istituire un .targets e file XML. Tuttavia, non riesco a scoprire come creare un nuovo tipo di oggetto in modo tale che venga visualizzato nello studio visivo, né posso capire come applicarlo magicamente a ogni file di tipo .foo. Inoltre, non ho capito in che modo uno di questi collegamenti a qualcosa che descrive l'atto di chiamare il mio strumento bar.exe.

Ho tentato di cercare tra tutti i file xml/target di Visual Studio per tracciare i Tipi di articoli esistenti e determinare come sono tradotti in azioni di build effettive. Termina sempre al muro di ItemType, dove c'è un gruppo descritto in ProjectItemsSchema, ma non riesco a trovare dove sono implementati, o come potrei implementarli da solo.

La documentazione di MSDN è stata un fallimento completo, e penso di aver letto ogni singola pagina potenzialmente correlata dieci volte, senza successo.

In Visual Studio 2008, ho avuto questo genere di cose lavorare con un file .rules che si presentava così:

<?xml version="1.0" encoding="utf-8"?> 
<VisualStudioToolFile 
Name="Foo Build Rules" 
Version="8.00" 
> 
<Rules> 
    <CustomBuildRule 
     Name="FooBuild" 
     DisplayName="FooGen" 
     CommandLine="..\..\tools\FooGen.exe [inputs]" 
     Outputs="$(InputName).h" 
     AdditionalDependencies="*.foo" 
     FileExtensions="*.foo" 
     ExecutionDescription="Generating Foos..." 
     > 
     <Properties> 
     </Properties> 
    </CustomBuildRule> 
</Rules> 
</VisualStudioToolFile> 

Eppure Questa funzionalità è stata deprecata nel 2010, e sono stato in grado di capire come replicarlo con il nuovo sistema.

Aiuto?

+0

Avete controllato questo? http://msdn.microsoft.com/en-us/library/xfsbz6cw(v=vs.100).aspx – hege

+0

Questi sono quelli che stavo usando nel 2008. Non funzionano più nel 2008. –

+0

Suppongo che tu abbia letto anche questo: http://blogs.msdn.com/b/vcblog/archive/2010/04/21/quick-help-on-vs2010-custom-build-rule.aspx. Ciò che ha attirato la mia attenzione è che, secondo questo, hai bisogno anche di un file .props, forse è quello che ti manca. Non ho provato me stesso però .... – hege

risposta

7

Inizia aggiungendo un Gruppo oggetti personalizzato al file di progetto.

come di seguito:

<ItemGroup> 
    <CustomBuild Include="faq.txt"> 
     <Message>Copying readme...</Message> 
     <Command>copy %(Identity) $(OutDir)%(Identity)</Command> 
     <Outputs>$(OutDir)%(Identity)</Outputs> 
    </CustomBuild> 
    </ItemGroup> 

successivo creare un target personalizzato e definire in quale parte del processo di generazione che si desidera eseguire i vostri obiettivi personalizzati nel processo di generazione.

I collegamenti seguenti spiegano in dettaglio e passo dopo passo.

Spero che questo aiuti.

Walk-through: Using MSBuild to Create a Visual C++ Project

How to: Add Custom Build Tools to MSBuild Projects

Note: Nella versione corrente, l'IDE non supporta la creazione di nuove regole. Per questo motivo, il modo più semplice per utilizzare un file di regole da un progetto creato utilizzando una versione precedente di Visual C++ è migrare il progetto nella versione corrente.

+0

Perché il voto negativo? – SoftwareCarpenter

+0

In questo esempio, il passaggio 'CustomBuild' si applica solo a un file,' faq.txt'. L'OP voleva un passo 'CustomBuild' che gira su più file come' * .foo'. –

+1

Solo per seguire, 'CustomBuild' può anche essere usato con caratteri jolly, quindi usando' 'funziona come previsto. Grazie. –