Roslyn分析仪作为nuget软件包安装,它们是FxCop Analyzers的依赖项(也作为nuget软件包安装)。
我已按照此处的说明启用了完整的解决方案分析:How to Enable and disable full solution analysis for managed code。
对于使用FxCop / Roslyn Analyzers的大多数项目,我有一个相当大的解决方案,并且Visual Studio的构建通常在不到一分钟内就可以完成。
但是,使用以下命令通过命令行运行msbuild时:
"C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/MSBuild.exe" "C:\Source\MySolution\MySmartClient.sln" /p:Configuration=Develop;Platform="Any CPU" /
t:Build
构建解决方案大约需要4-15分钟。在使用相同命令的构建服务器上也是如此。
我已经尝试过/p:RunCodeAnalysis=False
,但没有任何效果。我还使用了进程监视器来模拟VS发送给msbuild的msbuild命令,而无需进行任何更改。
并且,根据此文档:How to: Enable and disable automatic code analysis for managed code
在构建中启用代码分析复选框仅影响静态代码分析。它不会影响Roslyn代码分析器,如果您将它们安装为NuGet软件包,则它们始终在构建时执行。
这些过多的构建时间不切实际。通过命令行使用msbuild时可以禁用任何方法吗?
答案 0 :(得分:3)
自原始答案以来,文档已更改。现在有this page documenting how to disable code analysis from analyzers:
您可以使用3个MSBuild属性来控制分析器的行为(所有默认设置为true):
编辑:除非您的项目中包含Microsoft.CodeAnalysis.targets,否则似乎正在跟踪an issue在这些道具不起作用的地方。因此,在解决此问题之前,您的里程可能会有所不同。
答案 1 :(得分:1)
如果有人碰巧在这里找到自己,我在Github上的dotnet / roslyn项目中遇到了这个问题:
Feature: MSBuild switch for turning on/off analysis #23591
前面的问题描述了一种解决方法:
Substitute for old MSBuild properties? #1431
<PropertyGroup>
<RunCodeAnalysis Condition="'$(RunCodeAnalysis)' == ''">true</RunCodeAnalysis>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="<whatever analyzers package you are depending on>" Condition="'$(RunCodeAnalysis)' == 'true'" />
</ItemGroup>
# You'll need to run a restore when changing this value
msbuild /p:RunCodeAnalysis=false
尽管,但是由于我没有使用包引用,所以我有一些区别。这对我有用。
<ItemGroup>
<Analyzer Include="<whatever analyzers package you are depending on>" Condition="'$(RunCodeAnalysis)' == 'true'" />
</ItemGroup>
<!-- I added the condition to the EnsureNugetPackageBuildImports too. -->
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="'$(RunCodeAnalysis)' == 'true' AND !Exists('<relative path to the prop of whatever analyzers you are depending on>')" Text="$([System.String]::Format('$(ErrorText)', '<relative path to the prop of whatever analyzers you are depending on>'))" />
</Target>
答案 2 :(得分:0)
它不受真正支持,但是有一种解决方法:
在解决方案根文件夹中创建一个Directory.Build.targets
(msbuild> = v15.0),After.{SolutionName}.sln.targets
(msbuild <15.0)文件并添加:
<Project>
<Target Name="DisableAnalyzers"
BeforeTargets="CoreCompile"
Condition="'$(UseRoslynAnalyzers)' == 'false'">
<!--
Disable analyzers via an MSBuild property settable on the command line.
-->
<ItemGroup>
<Analyzer Remove="@(Analyzer)" />
</ItemGroup>
</Target>
</Project>
您现在可以传入/p:UseRosynAnalyzers=false
来删除项目中配置的所有分析器。
另请参阅:
您可以编辑条件以在RunCodeAnalysis=False
或Never
上触发。
<Target Name="DisableAnalyzers"
BeforeTargets="CoreCompile"
Condition="
'$(UseRoslynAnalyzers)' == 'false'
or '$(RunCodeAnalysis)' == 'false'
or '$(RunCodeAnalysis)' == 'never'" >