2015-11-10 726 views
43

將我的WinForms VS2013項目升級到VS2015後,我開始看到MSB3884「無法找到規則集文件」警告。VS2015:警告MSB3884:無法找到規則集文件

谷歌搜索出現了一篇MSDN文章,Stack Overflow文章指出以及許多其他網站。

類似的問題:33020507 MSDN:VS2015 MSB3884 Warning

我都VS2013和VS2015安裝。

提供警告(和那些沒有)的項目文件沒有這些條目。

<CodeAnalysisRuleSetDirectories> 
<CodeAnalysisRuleDirectories> 

如果我從項目中刪除文件,其他兩個條目,然後問題消失,這是顯而易見的,因爲沒有規則文件集。

<CodeAnalysisIgnoreBuiltInRuleSets> 
<CodeAnalysisIgnoreBuiltInRules> 

我想在外部使用msbuild進行構建,但是VS2015也傾向於顯示問題。有趣的是,如果我點擊項目屬性代碼分析器區域中的打開按鈕,我確實得到了該文件。

指定不同的規則集沒有區別。這讓我覺得可能有一個環境變量的設置,而不是任何想到的。代碼分析器是項目文件的一個功能。我可以添加目錄屬性,但共識是取出路徑,即<CodeAnalysisRule*Directories>

的GUI使用缺省值:

VS2015 Project Properties Code Analysis tab

下面是一個典型的項目文件片段。

<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> 

沒有擺脫從項目文件中的代碼分析線,雖然再次保存項目文件想補充回來,我怎麼能消除/修復的警告?

+1

的可能的複製[VS2015 MSB3884警告:找不到規則集文件(http://stackoverflow.com/questions/33020507/vs2015-msb3884-warning-could-not-find-rule-設置文件) – timB33

+0

@ timB33這兩個問題的區別在於,在這種情況下,目錄沒有明確設置在.csproj文件中 –

回答

54

從VS2013升級到VS2015後,我剛剛遇到同樣的問題。

我的解決辦法是:

  1. 在項目屬性轉至碼解析部分。
  2. 選擇規則集列表中的瀏覽選項。 enter image description here
  3. 瀏覽到VS2015規則集文件夾。 C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Team Tools \ Static Analysis Tools \ Rule Sets
  4. 選擇一個規則集。新項目使用的默認值爲:MinimumRecommendedRules.ruleset
  5. 重建。檢查警告已經消失。 enter image description here
+11

當我這樣做時,我在我的.csproj中獲取了一個相對路徑。這會弄亂我團隊的其他人,因爲它與我的工作空間相關。 – timB33

+0

@ timB33:建議你遵循的建議[33020507](https://stackoverflow.com/questions/33020507/vs2015-msb3884-warning-could-not-find-rule-set-file)和Visual Studio的升級過程:使用env變量設置路徑:'; $(DevEnvDir)\ .. \ .. \ Team Tools \ ...'。 –

13

我在從VS 2013遷移到VS 2015後也遇到了此警告。在我的情況下,錯誤是Could not find rule set file "AllRules.ruleset"。對我來說,修復是改變VisualStudioVersion設置在.csproj的文件是14.0,使它看起來在正確的規則集文件夾:

VisualStudioVersion setting

之後和重建,該警告就解決了。更容易。

+2

這似乎是正確的做法......它解決了我在多個項目中遇到的問題。 –

+3

我沒有這些屬性在我的.csproj文件 – PandaWood

5

你說你的項目文件散發出的警告並沒有包含任何<CodeAnalysisRuleSetDirectories>項。

煤礦沒有任何和你一樣,我得到的文件,如果我點擊在項目屬性代碼分析部分打開按鈕。

但是,搜索解決方案中的所有項目文件後,出現了兩個有<CodeAnalysisRuleSetDirectories>標籤的項目,這些標籤在路徑中包含較舊版本的Visual Studio參考。

修復這些路徑解決了我的問題,並且我剛剛確認引發錯誤的項目引用了一個項目,該項目引用了包含壞<CodeAnalysisRuleSetDirectories>條目的項目。

所以搜索整個解決方案和修復所有<CodeAnalysisRuleSetDirectories>路徑,或者嘗試刪除它們。

在我的情況

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

成爲

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

(喬恩Shadforth的回答也爲我工作,但我不喜歡加入的路徑,更多的項目 - 如timB33評論)

+0

事實上,舊版本的路徑沒有升級,因爲我沒有修改項目屬性,因爲我使用VS 2010或2012創建了它...有趣的情況下,乾淨的計算機導致麻煩:-) –

2

我擺脫了這個警告設置<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>

1

有這個wh編譯一個從VS2015升級到VS2017的解決方案,但在路徑(C:\ Program Files(x86)\ MSBuild \ 14.0 \ Bin)中有MSBuild 14。已更改,以確保15是在路徑(C:\ Program Files文件(x86)\微軟Visual Studio \ 2017 \專業\ MSBuild \ 15.0 \斌)和所有的工作。

0

我花了一些時間看這裏提出不同的解決方案 - 他們每過好元素,但是每一個需要一些調整。我發現了一個乾淨的解決方案是:

找到一個現有的或不具有條件(如配置或平臺),即,將適用於所有配置上的所有plateforms項目文件中創建一個元素。在這個元素中添加一個指定「規則集」目錄路徑的元素。例如:

<PropertyGroup> 
    <CodeAnalysisRuleSetDirectories>$(DevEnvDir)\..\..\Team Tools\Static Analysis Tools\Rule Sets</CodeAnalysisRuleSetDirectories> 
</PropertyGroup> 
相關問題