W tej chwili przejeżdżamy z VS2015 do VS2017. Jednym z naszych kroków jest przełączenie z StyleCop do nowego pakietu Stylecop.analyzer. Nowy stykop jest używany 2 plików. StyleCop.jset i stylecop.ruleset.

cel: Chcę dostarczyć pliki StyleCop jako niestandardowy pakiet Nuget. Ale nie wiem, jak stworzyć potrzebne wpisy .csproj.

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
...
        <CodeAnalysisRuleSet>packages\My.StyleCop.1.0.0-pre15\RuleSet\My.StyleCop.ruleset</CodeAnalysisRuleSet>
    </PropertyGroup>    
...
    <ItemGroup>
        <AdditionalFiles Include="packages\My.StyleCop.1.0.0-pre15\Config\stylecop.json">
            <Link>stylecop.json</Link> 
        </AdditionalFiles>  
    </ItemGroup>
</Project>

W przeszłości istniała możliwość użycia skryptu install.ps1 do wykonania tego materiału. Ale z Nuget 3. (lub 4.) Skrypty instalacji są przestarzałe i zostaną zignorowane.

Próbowałem już użyć my.stykop.targets:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <AdditionalFiles Include="packages\My.StyleCop.1.0.0-pre17\Config\stylecop.json">
          <Link>stylecop.json</Link> 
        </AdditionalFiles>    
    </ItemGroup>
</Project>

Ale tutaj też mam kilka problemów. Od tego, że Nuget 3. (lub 4.) Nie ma rozwiązania szerokiego folderu pakietu i nie znam żadnych zmiennych ani symbolu zastępczego Mogę użyć tutaj, aby uzyskać absolutną lub względną ścieżkę do mojego pakietu.

2
SteMa 19 luty 2018, 19:55

3 odpowiedzi

Najlepsza odpowiedź

dzięki Paulo. Jak to zrobiłem:

To jest struktura mojego pakietu Nuget.

enter image description here

Rozwiązanie jest łatwe. Musisz utworzyć pliki. Plik .props i plik

W tych plikach MSBUILD możesz użyć zmiennej $ (MSBUIDHISFILEDORY), aby uzyskać ścieżkę pakietu Nuget.

MSBuildThisFileDirectory  = C:\Users\UserName\.nuget\packages\sig.stylecop\1.0.0-pre23\build\

Mój plik sig.stykop.props:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)\..\RuleSet\SIG.combiLink.ruleset</CodeAnalysisRuleSet>
    </PropertyGroup>
</Project>

Mój plik sig.stykop.targets:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <AdditionalFiles Include="$(MSBuildThisFileDirectory)\..\Config\stylecop.json">
            <Link>stylecop.json</Link> 
        </AdditionalFiles>    
    </ItemGroup>    
</Project>

Przyczyna struktury mojego pakietu Muszę nawigować (..) do konfiguracji i do folderu Reguła.

1
anaximander 18 grudzień 2018, 10:20

Możesz dodać pliki .props lub .targets do folderu build w pakietach i zostaną zaimportowane do projektów.

Na pliku .props można użyć zmiennej MSBuild MSBuildThisFileDirectory, która reprezentuje folder, w którym znajduje się ten plik.

2
Paulo Morgado 19 luty 2018, 21:49

Zmienna $ (MSBUIDHISFILEDIRECTION) już zawiera odwrotny ukośnik na końcu. Ważne jest, aby pominięcie odwrotnego ukośnika podczas odwoływania reguł i pliku StyleCop.json:

<CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)..\RuleSet\SIG.combiLink.ruleset</CodeAnalysisRuleSet>

<AdditionalFiles Include="$(MSBuildThisFileDirectory)..\Config\stylecop.json">

Dzięki dwukrotnym ukośnikowi doświadczyłem dwóch dziwnych problemów w Visual Studio 2017:

  • Testy jednostkowe odbudowują kod za każdym razem, gdy je zaczynam, nawet bez zmiany kodu

  • IDE pokazuje wiele błędów styleckich w oknie listy błędów i pokazuje czerwone znaki w pasku przewijania nawet dla reguł, które są wyraźnie wyłączone w zestawie reguł.

1
f8smiles 17 lipiec 2019, 19:25