Jenkins 从命令行生成时MSBuild警告MSB3884

Jenkins 从命令行生成时MSBuild警告MSB3884,jenkins,msbuild,visual-studio-2015,msbuild-14.0,Jenkins,Msbuild,Visual Studio 2015,Msbuild 14.0,当使用MSBuild14在生成服务器(使用Jenkins)上生成我们的解决方案时,会出现以下警告: C:\程序文件 (x86)\MSBuild\14.0\bin\Microsoft.VisualBasic.CurrentVersion.targets(133,9): 警告MSB3884:未能找到规则集文件“ManagedMinimumRules.ruleset” 找到了 在我的开发人员机器上执行相同的命令行调用时,不会出现此警告 知道生成服务器上出现此警告的原因吗 我已经为MSBuild打开了一

当使用
MSBuild
14在生成服务器(使用
Jenkins
)上生成我们的解决方案时,会出现以下警告:

C:\程序文件 (x86)\MSBuild\14.0\bin\Microsoft.VisualBasic.CurrentVersion.targets(133,9): 警告MSB3884:未能找到规则集文件“ManagedMinimumRules.ruleset” 找到了

在我的开发人员机器上执行相同的命令行调用时,不会出现此警告

知道生成服务器上出现此警告的原因吗

我已经为MSBuild打开了一个问题:

相关:

检查您的csproj是否有DevEnvDir,而不是VS(esp vs2010)的路径。我认为你的笔记本电脑安装了合适的VS,而你的构建服务器没有

<CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSetDirectories>;$(DevEnvDir)\..\..\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
ManagedMinimumRules.ruleset
;$(DevEnvDir)\..\团队工具\静态分析工具\\规则集

解决方案:创建一个空规则集文件,并将其作为命令行参数传递给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>     
您只需将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%
set NoRules=NoRules.ruleset
@回声生成%NoRules%
如果不存在%n规则%(
@回声^>%NoRules%

@echo^在生成服务器上创建以下文件夹:

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

在生成服务器上运行它,重新启动,完成,警告消失。

将此属性添加到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"

你能详细说明一下吗?我的.csproj文件根本没有这些标记。我需要将它们添加到某个地方吗?ManageMinimumRules是visual studio附带的代码分析规则集,我想在某个时候,你已经在你的开发机器上安装了VS或它的SDK之一。当你在本地执行开发机器时,你会很高兴。这是可能的您的生成主机尚未添加其中任何一个,并且当msbuild查找此文件夹时,找不到该文件夹。我对vs2010的评论可能不适用,但存在一个类似的错误,其中vs2010用于在您的csproj中硬编码此规则集的2010路径,然后当同事将您的解决方案与例如VS2012一起使用时,生成将被删除另请参阅此答案:通过正确安装VS2017构建工具,不应发生此错误。
>"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"