2015-11-10 22 views
43

Po uaktualnieniu projektu WinForms VS2013 do wersji VS2015, zacząłem wyświetlać ostrzeżenie MSB3884 "Nie można znaleźć pliku zestawu reguł".VS2015: ostrzeżenie MSB3884: Nie można znaleźć pliku zestawu reguł

Po wyszukiwaniu Google pojawił się jeden artykuł MSDN, na który wskazuje artykuł przepełnienia stosu, a także wiele innych witryn.

podobne pytanie: 33020507 MSDN: VS2015 MSB3884 Warning

Mam VS2013 i VS2015 zarówno zainstalowany.

Pliki projektu zawierające ostrzeżenia (i te, które tego nie robią), nie mają tych wpisów.

<CodeAnalysisRuleSetDirectories> 
<CodeAnalysisRuleDirectories> 

Jeśli usunę dwa pozostałe wpisy z pliku projektu, problem zniknie, co jest oczywiste, ponieważ nie ma zestawu plików reguł.

<CodeAnalysisIgnoreBuiltInRuleSets> 
<CodeAnalysisIgnoreBuiltInRules> 

Próbuję budować zewnętrznie za pomocą msbuild, jednak VS2015 ma tendencję do pokazywania problemu.

Co ciekawe, jeśli kliknę przycisk Otwórz w obszarze Właściwości analizatora kodu, otrzymam plik.

Określenie innego zestawu reguł nie ma znaczenia. To sprawia, że ​​myślę, że możliwe jest ustawienie zmiennej środowiskowej, a nie takie, jakie przychodzą na myśl. Code Analyzers jest funkcją pliku projektu. Mogę dodać atrybut katalogu, ale konsensus polega na wyjęciu ścieżek, <CodeAnalysisRule*Directories>.

GUI używa domyślnych:

VS2015 Project Properties Code Analysis tab '

Oto typowy fragment pliku projektu.

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> 
    <DebugSymbols>true</DebugSymbols> 
    <OutputPath>bin\x86\Debug\</OutputPath> 
    <DefineConstants>TRACE;DEBUG</DefineConstants> 
    <DebugType>full</DebugType> 
    <PlatformTarget>x86</PlatformTarget> 
    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets> 
    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules> 
    <Prefer32Bit>false</Prefer32Bit> 
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors> 
    <CodeAnalysisRuleSet>BasicCorrectnessRules.ruleset</CodeAnalysisRuleSet> 
    </PropertyGroup> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'"> 
    <DebugSymbols>true</DebugSymbols> 
    <OutputPath>bin\x64\Debug\</OutputPath> 
    <DefineConstants>TRACE;DEBUG</DefineConstants> 
    <DebugType>full</DebugType> 
    <PlatformTarget>x64</PlatformTarget> 
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> 
    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules> 
    </PropertyGroup> 

Bez pozbycia linii Code Analysis z pliku projektu, choć ponownie zapisywania pliku projektu po prostu dodać go z powrotem, w jaki sposób można wyeliminować/naprawić ostrzeżenie?

+1

Możliwy duplikat [VS2015 MSB3884 ostrzeżenia: Nie można odnaleźć zestawu reguł plik] (http://stackoverflow.com/questions/33020507/vs2015-msb3884-warning-could-not-find-rule- set-file) – timB33

+0

@ timB33 Różnica między tymi dwoma pytaniami polega na tym, że w tym przypadku katalogi nie są jawnie ustawione w pliku .csproj. –

Odpowiedz

54

Po prostu miałem ten sam problem po aktualizacji z VS2013 na VS2015.

Moje rozwiązanie było:

  1. Na właściwości projektu przejdź do sekcji Code Analysis.
  2. Wybierz opcję Przeglądaj na liście zestawów reguł. enter image description here
  3. Przejdź do folderu zestawów reguł VS2015. C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Narzędzia zespołów \ Narzędzia analizy statycznej \ Zestawy reguł
  4. Wybierz zestaw reguł. Wartość domyślna używana przez nowe projekty to: MinimumRecommendedRules.ruleset
  5. Przebuduj. Sprawdź, czy ostrzeżenie zniknęło. enter image description here
+11

Po wykonaniu tego uzyskuję względną ścieżkę w moim .csproj. To zepsułoby resztę mojej drużyny, ponieważ jest ona zależna od tego, gdzie jest moja przestrzeń robocza. – timB33

+0

@ timB33: Sugerujemy wykonanie instrukcji z [33020507] (https://stackoverflow.com/questions/33020507/vs2015-msb3884-warning-could-not-find-rule-set-file) oraz procesu aktualizacji Visual Studio: ustaw ścieżkę za pomocą zmiennej env: '; $ (DevEnvDir) \ .. \ .. \ Team Tools \ ...'. –

13

Po ostrzeżeniu z wersji VS 2013 do wersji VS 2015 otrzymałem to ostrzeżenie.W moim przypadku błąd był Could not find rule set file "AllRules.ruleset". Rozwiązaniem dla mnie było, aby zmienić ustawienie VisualStudioVersion w pliku .csproj być 14.0 tak, że wygląda się w odpowiednim folderze ustawionym zasada:

VisualStudioVersion setting

potem i przebudowy, ostrzeżenie został rozwiązany. Dużo łatwiej.

+2

Wydaje się, że jest to właściwy sposób ... rozwiązał problem w wielu projektach. –

+3

Nie mam żadnego z tych atrybutów w moim pliku .csproj – PandaWood

5

Powiedziałeś, że twoje pliki projektu, które nie zawierają ostrzeżeń, nie zawierają żadnego wpisu o nazwie <CodeAnalysisRuleSetDirectories>.

Mój też nie, i tak jak ty dostaję plik, jeśli kliknę przycisk Otwórz w sekcji właściwości projektu Analiza kodu.

Jednak po wyszukaniu wszystkich plików projektu w rozwiązaniu pojawiły się dwa projekty, które miały znaczniki <CodeAnalysisRuleSetDirectories>, a te znaczniki zawierały starszą wersję odwołania Visual Studio w ścieżce.

Naprawienie tych ścieżek naprawiło mój problem i właśnie potwierdziłem, że projekt, który podnosił błąd, odwołuje się do projektu, który odwołuje się do projektów, które zawierały błędne wpisy: <CodeAnalysisRuleSetDirectories>.

Przeszukuj całe rozwiązanie i napraw wszystkie ścieżki <CodeAnalysisRuleSetDirectories> lub spróbuj je usunąć.

W moim przypadku

<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> 

stał

<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> 

(odpowiedź Jon Shadforth pracował również dla mnie, ale mi się nie podoba, dodając ścieżkę do większej liczby projektów - jak timB33 skomentował)

+0

Rzeczywiście, ścieżki starych wersji nie zostały zaktualizowane, ponieważ nie zmodyfikowałem właściwości projektu, ponieważ utworzyłem go z VS 2010 lub 2012 ... Interesujący przypadek, w którym czysty komputer powoduje kłopoty :-) –

2

Pozbyłem się tego ostrzeżenia, ustawiając <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>

1

Gdyby to było wh pl skompilowanie rozwiązania zaktualizowanego z VS2015 na VS2017, ale miało MSBuild 14 w ścieżce (C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin). Zmieniono, aby zapewnić, że 15 znajduje się w ścieżce (C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin) i wszystko działało.

0

Spędziłem trochę czasu na różnych zaproponowanych tutaj rozwiązaniach - każdy z nich miał dobre elementy, ale każdy wymagał pewnych korekt. Znalazłem czyste rozwiązanie:

Zlokalizuj istniejący lub utwórz element w pliku projektu, który NIE zawiera żadnych warunków (np. Konfiguracja lub platforma), tj. Będzie miał zastosowanie do wszystkich konfiguracji na wszystkich formach. W tym celu dodaj element określający ścieżkę do katalogu "Zestaw reguł". Np:

<PropertyGroup> 
    <CodeAnalysisRuleSetDirectories>$(DevEnvDir)\..\..\Team Tools\Static Analysis Tools\Rule Sets</CodeAnalysisRuleSetDirectories> 
</PropertyGroup> 
Powiązane problemy