2013-11-28 8 views
8

Ich versuche ein NuGet-Paket zu erstellen, das das Codeanalyse-Wörterbuch unseres Unternehmens automatisch hinzufügt und aktualisierbar macht.Code-Analyse-Regelsatz über nuget-Paket hinzufügen

Der Regelsatz wurde im Inhaltsordner hinzugefügt, und jetzt möchte ich das Skript install.ps1 verwenden, um den Regelsatz in der Projektdatei hinzuzufügen.
Ich habe herausgefunden, der Weg zu gehen wäre, die envDTE zu verwenden, aber ich kann nicht viel nützliche Dokumentation darüber finden, dann dieses überwältigende Objektdiagramm, in dem ich den CodeAnalysisRuleset-Knoten nicht finden kann.
http://msdn.microsoft.com/en-us/library/za2b25t3(v=vs.100).aspx

Verfolge ich den richtigen Weg?
Gibt es eine relevante Anleitung/Dokumentation zur Verwendung von envDTE in NuGet Powershell?
Wie kann ich mein Installationsskript ausführen/debuggen, ohne es zu einem Paket hinzufügen und gegen ein Projekt installieren zu müssen?

Nebenbei bemerkt
Obwohl @Nicole Calinoiu der bessere Weg zeigte, könnte dies Bissen von Informationen kommen in praktisch später:

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

Antwort

15

gibt es keine Notwendigkeit zu Skript dieser. Sowohl der Regelsatz als auch das Wörterbuch können über eine importierte MSBuild .props-Datei registriert werden, wie unter 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) beschrieben.

Zum Beispiel Ihre NuGet Quelle Ordnerstruktur könnte wie folgt aussehen (vorausgesetzt, "CodeAnalysisSettings" ist Ihr Paket ID):

  • build
    • CodeAnalysisSettings.props
  • Inhalt
    • MyCustomDictionary.xml MyRules.ruleset

wo der Inhalt von CodeAnalysisSettings.props so etwas wie die folgenden sind:

<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

Dammit! Ich habe es gestern Abend gefunden! Und ich beendete das Paket, um das Wörterbuch auch zu importieren. Danke aber :) –

+0

Gibt es etwas, das ich hier vermisse? Ich habe die Props-Datei erstellt, aber NuGet fügt das CodeAnalysisDictionary als eine Art von "Content" hinzu, wenn es eine Art von 'CodeAnalysisDictionary' sein soll. Ich bin mir nicht sicher warum. Es funktioniert gut, wenn ich 'Compile' für meine CS-Dateien benutze. –

+0

Das liegt daran, dass die VS-Benutzeroberfläche unterschiedliche Regeln für die Entscheidung über den Inhaltstyp verwendet, als dies bei der Codeanalyse von MSBuild-Dateien der Fall ist. Trotz der Anomalie der Benutzeroberfläche sollten Sie feststellen, dass Ihr Wörterbuch von der Codeanalyse verwendet wird. –

-2

Sie es auch mit den folgenden Schritten manuell tun können.

  • Rechts klicken Projekt
  • Zum Eigenschaften
  • Zum Drop-Down [Ausführen dieser Regelsatz]
  • Wählen Sie die [Browse ..] Option
  • Wählen Sie Ihre Firma ruleset, die Sie platzieren können an einem vordefinierten Ort im Quellcode.
  • Klicken Sie im geöffneten Fenster auf Öffnen
  • Speichern Sie die Projektdatei.

Sie können den Schritt für andere Projekte in der Lösung wiederholen.

+0

Das machen wir heute. Aber mit den Hunderten von Projekten, die wir haben, ist die Summe der verschwendeten Zeit mit den menschlichen Fehlern verbunden, die von Zeit zu Zeit auftreten. Ein nugget-Paket wäre interessanter. –

1

Ich hatte das gleiche Problem wie in den Kommentaren gemeldet: Das Wörterbuch wurde als Inhalt hinzugefügt, nicht als CodeAnalysisDictionary.

Ich habe dieses Stück Code in der install.ps1 des nuget Paket dieses Problem zu lösen:

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