簡體   English   中英

從命令行構建時,MSBuild警告MSB3884

[英]MSBuild Warning MSB3884 when building from command line

在構建服務器(使用Jenkins )上使用MSBuild 14構建我們的解決方案時會出現以下警告:

C:\\ Program Files(x86)\\ MSBuild \\ 14.0 \\ bin \\ Microsoft.VisualBasic.CurrentVersion.targets(133,9):警告MSB3884:無法找到規則集文件“ManagedMinimumRules.ruleset”。

在我的開發機器上執行相同的命令行調用,不會出現此警告。

任何想法為什么這個警告出現在構建服務器上?

我已經為MSBuild打開了一個問題: https//github.com/Microsoft/msbuild/issues/361

解決方案:創建一個空的規則集文件,並將其作為命令行參數傳遞給MSBuild。

NoRules.ruleset文件:

<?xml version="1.0" encoding="utf-8"?> 
<!--                                   
Problem: warning MSB3884 
  Visual Studio 2015 includes references to MinimumRecommendedRules.ruleset in .csproj files. 
  MSBuild 10 cannot find this reference and generates warning MSB3884. 

Solution: Create NoRules.ruleset [this file] and pass it to MSBuild in a command switch.  Need to pass full path name to MSBuild. 
Example: MSBuild /property:CodeAnalysisRuleSet="$Workspace\NoRules.ruleset" 

References: 
  https://msdn.microsoft.com/en-us/library/dd264949.aspx 
  https://msdn.microsoft.com/en-us/library/ms164311.aspx 
-->      
<RuleSet Name="NoRules" Description="This rule set contains no rules." ToolsVersion="14.0"> 
</RuleSet>     

對於Jenkins構建,添加以下MSBuild開關以覆蓋項目設置並使用NoRules文件:

/property:CodeAnalysisRuleSet="$Workspace\NoRules.ruleset" 

您只需將NoRules文件添加到源代碼管理即可。 我選擇在MSBuild步驟之前使用批處理文件在Jenkins中動態構建它:

set NoRules=NoRules.ruleset
@echo Making %NoRules%
if not exist %NoRules% (
  @echo ^<?xml version="1.0" encoding="utf-8"?^> >%NoRules%
  @echo ^<!--                                   >>%NoRules%
  call :WriteToFile %NoRules% "Problem: warning MSB3884"
  call :WriteToFile %NoRules% "  Visual Studio 2015 includes references to MinimumRecommendedRules.ruleset in .csproj files."
  call :WriteToFile %NoRules% "  MSBuild 10 cannot find this reference and generates warning MSB3884."
  @echo.          >>%NoRules%
  call :WriteToFile %NoRules% "Solution: Create NoRules.ruleset [this file] and pass it to MSBuild in a command switch."
  call :WriteToFile %NoRules% "  Need to pass full path name to MSBuild."
  @echo Example: MSBuild /property:CodeAnalysisRuleSet="$WORKSPACE\NoRules.ruleset" >>%NoRules%
  @echo.          >>%NoRules%
  call :WriteToFile %NoRules% "References:"
  call :WriteToFile %NoRules% "  https://msdn.microsoft.com/en-us/library/dd264949.aspx"
  call :WriteToFile %NoRules% "  https://msdn.microsoft.com/en-us/library/ms164311.aspx"
  @echo --^>      >>%NoRules%
  @echo ^<RuleSet Name="NoRules" Description="This rule set contains no rules." ToolsVersion="14.0"^> >>%NoRules%
  @echo ^</RuleSet^> >>%NoRules%
)
exit /b %errorlevel%

:WriteToFile
  @echo %~2 >>%1
exit /b %errorlevel%

此文件還顯示Jenkins ConsoleOut顯示中的注釋。 這應該可以幫助您了解之后為什么這樣做。

在構建服務器上創建以下文件夾:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\Rule Sets

將所有規則集文件從開發計算機復制到構建服務器上。

然后通過創建包含以下內容的“addkey.reg”文件來添加以下注冊表項:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\Setup\EDev]
"StanDir"="C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Team Tools\\Static Analysis Tools\\"

在構建服務器上運行它,重啟,完成,警告消失。

相關: VS2015:警告MSB3884:找不到規則集文件

檢查你的csproj有一個DevEnvDir而不是VS的路徑(esp vs2010)。 我估計你的筆記本電腦安裝了相應的VS而你的構建服務器卻沒有。

<CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSetDirectories>;$(DevEnvDir)\..\..\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>

將此屬性添加到msbuild命令:

CodeAnalysisRuleSetDirectories="C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Team Tools\Static Analysis Tools\Rule Sets".

例如,我使用了這個命令

>"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\msbuild" solutionName.sln /target:build /property:Configuration=Release;CodeAnalysisRuleSetDirectories="C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Team Tools\Static Analysis Tools\Rule Sets"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM