2013-11-28 12 views
8

Próbuję zbudować pakiet NuGet, który automatycznie i aktualizuje słownik analizy kodów naszej firmy.Dodaj zestaw reguł analizy kodu za pomocą pakietu nuget

Zestaw reguł został dodany do folderu zawartości, a teraz chcę użyć skryptu install.ps1, aby dodać zestaw reguł do pliku projektu.
Wyszedłem, że sposobem na wykorzystanie byłoby użycie envDTE, ale nie mogę znaleźć wiele przydatnych informacji o nim poza tym przytłaczającym wykresem obiektów, w którym nie mogę znaleźć węzła CodeAnalysisRuleset.
http://msdn.microsoft.com/en-us/library/za2b25t3(v=vs.100).aspx

Czy podążam właściwą ścieżką?
Czy istnieje jakiś odpowiedni samouczek/dokumentacja na temat korzystania z envDTE w pakiecie uprawnień NuGet?
Jak mogę uruchomić/debugować skrypt instalacyjny bez konieczności dodawania go do pakietu i instalowania go względem projektu?

Sidenote
Chociaż @Nicole Calinoiu pokazał lepszy sposób, to kąsek informacji może się przydać później:

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

Odpowiedz

15

Nie ma potrzeby do tego skryptu. Zarówno zestaw reguł, jak i słownik mogą być rejestrowane za pomocą zaimportowanego pliku MSBuild .props, jak opisano w 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).

Na przykład, Nuget struktura folderów źródło może wyglądać następująco (przy założeniu "CodeAnalysisSettings" to identyfikator pakietu):

  • build
    • CodeAnalysisSettings.props
  • zawartość
    • MyCustomDictionary.xml
    • MyRules.ruleset

gdzie zawartość CodeAnalysisSettings.props są czymś tak:

<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

cholery! Właśnie znalazłem to wczoraj wieczorem! Skończyłem też pakiet, aby zaimportować słownik. Dziękujemy jednak :) –

+0

Czy jest tu coś, czego mi tu brakuje? Stworzyłem plik rekwizytów, jednak NuGet dodaje CodeAnalysisDictionary jako typ "Content", kiedy powinien być typem "CodeAnalysisDictionary". Nie jestem pewien dlaczego. Działa to dobrze, gdy używam 'Kompilacji' dla moich plików cs. –

+0

Dzieje się tak dlatego, że interfejs użytkownika VS używa różnych reguł do decydowania o rodzaju zawartości niż analiza kodu, którą robią pliki MSBuild. Pomimo anomalii wyświetlania interfejsu użytkownika, powinieneś odkryć, że Twój słownik jest używany przez analizę kodu. –

-2

Można również zrobić to ręcznie, wykonując następujące kroki.

  • Prawo projekt kliknij
  • przejdź do właściwości
  • Przejdź do menu rozwijanego [Uruchom ten przepis zestaw]
  • Wybierz [Przeglądaj ..] opcja
  • Wybierz swój zestaw reguł firmy, które można umieścić w predefiniowanej lokalizacji w kodzie źródłowym.
  • Kliknij Otwórz w oknie Otwórz
  • Zapisz plik projektu.

Możesz powtórzyć krok dla innych projektów w rozwiązaniu.

+0

To właśnie robimy dzisiaj. Ale z setkami projektów mamy, całkowita suma straconego czasu w połączeniu z ludzkimi błędami, które pojawiają się od czasu do czasu. Pakiet nuget byłby bardziej interesujący. –

1

Miałem taki sam problem, jak podano w komentarzach: słownik został dodany jako treść, a nie jako CodeAnalysisDictionary.

dodałem ten kawałek kodu w install.ps1 pakietu Nuget aby rozwiązać ten problem:

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