Отключить анализ SonarLint во время сборки отладки

Возможно ли (в Visual Studio с использованием расширения SonarLint) отключить анализаторы сонара во время сборки отладки, но оставить их включенными в сборке Release? Причина в том, что подключение решения к SonarQube резко увеличило время сборки.


person Narayana    schedule 16.11.2017    source источник


Ответы (3)


Я закончил тем, что изменил файлы .csproj, чтобы удалить анализаторы, если я создаю решение из Visual Studio в конфигурации отладки. Таким образом, sonarlint не жалуется на то, что правила устарели, и на него не влияют обновления. Я получил ответ здесь

<Target Name="DisableAnalyzersForVisualStudioBuild"
        BeforeTargets="CoreCompile"
        Condition="'$(BuildingInsideVisualStudio)' == 'True' And '$(BuildingProject)' == 'True' And '$(Configuration)' == 'Debug'">
  <!--
    Disable analyzers when building a project inside Visual Studio. Note that analyzer behavior for IntelliSense purposes is not altered by this.
  -->
  <ItemGroup>
    <Analyzer Remove="@(Analyzer)"/>
  </ItemGroup>
</Target>
person Narayana    schedule 17.11.2017

Единственный способ, который я могу придумать, - это продублировать ваши наборы правил и снизить (отключить) правила для режима отладки, но сохранить исходный набор правил для режима выпуска. Обратите внимание, что это будет болезненно, потому что SonarLint будет жаловаться на то, что у вас более низкая сила набора правил по сравнению с профилем качества на SonarQube. Кроме того, каждый раз, когда вы будете обновлять, это, вероятно, сломает эту ручную настройку.

person Amaury Levé    schedule 16.11.2017
comment
Могу ли я использовать раздел «Анализ кода» в свойствах проекта, чтобы выбрать разные наборы правил для разной конфигурации? Одна вещь, которая мне показалась странной, - даже если флажок «Включить анализ кода при сборке» не установлен, анализатор сонара, похоже, работает. - person Narayana; 16.11.2017
comment
Вероятно, вы можете поднять здесь вопрос, чтобы поддержать этот флаг github.com/SonarSource/sonar-csharp/issues - person Dzmitry Lahoda; 29.08.2018

Параметры 1. Пустые библиотеки DLL.

Если у вас есть SonarLint как часть .csproj файлов, как показано ниже:

  <ItemGroup>
    <Analyzer Include="$(SolutionDir)CodeAnalRules\SonarAnalyzer.CSharp.dll" />
    <Analyzer Include="$(SolutionDir)CodeAnalRules\SonarAnalyzer.dll" />
  </ItemGroup>

Скомпилируйте следующий код в сборку. Скопируйте и назовите его SonarAnalyzer.CSharp.dll и SonarAnalyzer.dll. Замените существующие сборки сонара этим. Вернитесь назад для сборки Release.

using System;
using System.Collections.Immutable;
using System.Composition;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CodeFixes;
using Microsoft.CodeAnalysis.Diagnostics;

namespace DisableSonarLint
{
    [DiagnosticAnalyzer(LanguageNames.CSharp)]
    public class DisableSonarLintAnalyzer : DiagnosticAnalyzer
    {
        public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create<DiagnosticDescriptor>();

        public override void Initialize(AnalysisContext context)
        {

        }
    }

    [ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(DisableSonarLintCodeFixProvider)), Shared]
    public class DisableSonarLintCodeFixProvider : CodeFixProvider
    {
        public override ImmutableArray<String> FixableDiagnosticIds => ImmutableArray.Create<string>();

        public override Task RegisterCodeFixesAsync(CodeFixContext context)
        {
            return Task.CompletedTask;
        }
    }
}

Вариант 2. Измените файлы проекта.

Комбинированный хак, чтобы избежать анализа и пересборок

:: Starts Visual Studio 2017 with code analysis turned off to minimize [lead time](https://en.wikipedia.org/wiki/Lead_time).
:: Most probably you will need start Visual Studio with code analysis before sharing/uploading/publishing/pushing code. 
:: You may use [Process Hacker] devenv.exe -> Environment -> DevDivCodeAnalysisRunType = Enabled to set value back without restart
::
::
::   To disable Sonar Analysis or other Roslyn analyzers may use next in `.csproj` files:
::   ```
::   <ItemGroup>
::     <Analyzer Condition="'$(DevDivCodeAnalysisRunType)' != 'Disabled'" Include="$(SolutionDir)CodeAnalRules\SonarAnalyzer.CSharp.dll" />
::   </ItemGroup>
::   ```
::
:: Other ways to improve Eval part REPL of:
::
::   Assign hot key to build only this project `Build.BuildSelection` to get only modified project built, I have used `Ctrl + B + B`
::   https://stackoverflow.com/questions/247745/is-there-a-standard-keyboard-shortcut-to-build-the-current-project-in-visual-stu
::
::   May stop build on first error
::   https://marketplace.visualstudio.com/items?itemName=EinarEgilsson.StopOnFirstBuildError
::
::   Attach to previously attached process via https://marketplace.visualstudio.com/items?itemName=ErlandR.ReAttach
::   Debugger.Break on relevant process start.
:: 
::   Mount [in memory virtual disk](https://sourceforge.net/projects/imdisk-toolkit/), copy code here and work with it. Several time faster than drive.
::
::   Obtain (better hardware) [https://komp.1k.by/utility-harddisks/samsung/Samsung_MZ_V7P512BW-3243815.html + https://ark.intel.com/products/134903/Intel-Core-i9-8950HK-Processor-12M-Cache-up-to-4_80-GHz]
::
::   Dump in one run and analyze later (use your language and dump target as needed) by placing next in all possibly related places:
::   ```
::   System.Diagnostics.Debug.WriteLine("=#-");
::   System.Diagnostics.Debug.WriteLine(new System.Diagnostics.StackFrame().GetMethod().DeclaringType.Name + "." + new System.Diagnostics.StackFrame().GetMethod().Name + "." + new System.Diagnostics.StackFrame(true).GetFileLineNumber() + ";Thread: " + System.Threading.Thread.CurrentThread.ManagedThreadId + ";Ticks:" + System.DateTime.UtcNow.ToString("MM.ddTHH.mm.ss.fffffff", System.Globalization.CultureInfo.InvariantCulture));
::   System.Diagnostics.Debug.WriteLine((null) + " " + (null) + " " + (null)); 
::   System.Diagnostics.Debug.WriteLine("=#");
::   ```
::   (try some `object OR debug dump` assembly from nuget.org)
::   
::   Use Immediate Window to run code when hit breakpoint
::   
set DevDivCodeAnalysisRunType=Disabled
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.exe"
person Dzmitry Lahoda    schedule 28.08.2018