2013-11-28 15 views
8

Sto provando a creare un pacchetto NuGet che aggiunge automaticamente e aggiornabile il dizionario di analisi del codice della nostra azienda.Aggiungi set di regole di analisi del codice tramite il pacchetto nuget

Il set di regole viene aggiunto nella cartella del contenuto e ora voglio utilizzare lo script install.ps1 per aggiungere la serie di regole nel file di progetto.
Ho capito che la strada da percorrere sarebbe stata l'uso di envDTE, ma non trovo molta documentazione utile su di esso oltre a questo travolgente oggetto grafico in cui non riesco a trovare il nodo CodeAnalysisRuleset.
http://msdn.microsoft.com/en-us/library/za2b25t3(v=vs.100).aspx

Sto seguendo la strada giusta?
Esiste qualche tutorial/documentazione pertinente su come utilizzare envDTE in NuGet powershell?
Come posso eseguire/eseguire il debug del mio script di installazione senza doverlo effettivamente aggiungere a un pacchetto e installarlo su un progetto?

Sidenote
Anche se @Nicole Calinoiu ha mostrato il modo migliore, questo pezzo di informazione potrebbe tornare utile più avanti:

foreach ($config in $project.ConfigurationManager){ 
    $config.Properties.Item("CodeAnalysisRuleSet").Value = "myruleset.ruleset" 
} 

risposta

15

Non c'è alcun bisogno di questo script. Sia il set di regole che il dizionario possono essere registrati tramite un file MSBuild .props importato, come descritto allo http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Import_MSBuild_targets_and_props_files_into_project_(Requires_NuGet_2.5_or_above).

Ad esempio, la struttura della cartella principale NuGet potrebbe assomigliare a questo (assumendo "CodeAnalysisSettings" solamente dell'ID di pacchetto):

  • accumulo
    • CodeAnalysisSettings.props
  • contenuti
    • MyCustomDictionary.xml
    • MyRules.ruleset

in cui il contenuto di CodeAnalysisSettings.props sono qualcosa come il seguente:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <RunCodeAnalysis>true</RunCodeAnalysis> 
     <CodeAnalysisRuleSet>MyRules.ruleset</CodeAnalysisRuleSet> 
    </PropertyGroup> 
    <ItemGroup> 
     <CodeAnalysisDictionary Include="MyCustomDictionary.xml" /> 
    </ItemGroup> 
</Project> 
+0

Dannazione! L'ho appena trovato ieri sera! E ho finito il pacchetto per importare anche il dizionario. Grazie però :) –

+0

C'è qualcosa che mi manca qui? Ho creato il file props, ma NuGet aggiunge CodeAnalysisDictionary come un tipo di 'Content' quando dovrebbe essere un tipo di' CodeAnalysisDictionary'. Non sono sicuro del perché. Funziona bene quando uso 'Compile' per i miei file cs però. –

+0

Questo perché l'interfaccia utente VS utilizza regole diverse per decidere il tipo di contenuto rispetto all'analisi del codice dei file MSBuild. Nonostante l'anomalia di visualizzazione dell'interfaccia utente, dovresti scoprire che il tuo dizionario viene utilizzato dall'analisi del codice. –

-2

È anche possibile farlo manualmente utilizzando la procedura seguente.

  • destro progetto clic
  • Vai alla proprietà
  • Vai alla discesa [Esegui questo set di regole]
  • Selezionare [Sfoglia ..] opzione
  • Scegliete il set di regole società che è possibile posizionare in una posizione predefinita nel codice sorgente.
  • Fare clic su Apri nella finestra Apri
  • Salvare il file di progetto.

È possibile ripetere il passaggio per altri progetti nella soluzione.

+0

Questo è quello che stiamo facendo oggi. Ma con le centinaia di progetti che abbiamo, la somma totale dei tempi sprecati combinata con gli errori umani che si verificano di volta in volta. Un pacchetto di nuget sarebbe più interessante. –

1

Ho avuto lo stesso problema riportato nei commenti: il dizionario è stato aggiunto come contenuto, non come CodeAnalysisDictionary.

ho aggiunto questo pezzo di codice nel install.ps1 del pacchetto NuGet per risolvere questo:

$dictionary = $project.ProjectItems | Where-Object {$_.Name.EndsWith("CustomDictionary.xml")} 
$dictionary.Properties.Item("Buildaction").Value = [int]5; 
Problemi correlati