Problem with sonar.exclusions

msbuild
exclusions
vsts

(Haejoong Lee) #1

In the root folder, I have a solution file (.sln). Sub-folders are individual projects with a project file, e.g. .csproj. I want to exclude all files in a folder called “Scripts” inside only one of the sub-folders. Adding the path to the analysis scope settings on the web site (e.g. Scripts/**/*) makes Scripts directories in other projects get excluded as well undesirably. Note that I’m not excluding the entire project, but a folder in the project. Any solution for this?


(G Ann Campbell) #2

Hi,

Since you haven’t yet been successful in setting your exclusion, then you’ll be able to look at this directory in SonarQube and see the path as SonarQube understands it. Once you have it, you can feed that path into your exclusion and it should work for you.

Note that while it is possible to set exclusions analysis-side, doing so can be tricky and painful. I recommend using the UI for this instead.

Ann


(Haejoong Lee) #3

Thanks for the quick response. There seems to be misunderstanding of my original question. To clarify:

  • the exclusion setting works, but it has a side effect of excluding unintended directories from other projects
  • the exclusion is set from the “UI” if you meant the SonarCloud web site by “UI”

(Nicolas Bontoux) #4

Are you configuring the exclusion at global level ? (in the SonarQube Admin settings) Be aware that exclusions can be configured per-project, by going in the administration space of that specific project.


(Haejoong Lee) #5

No, it’s per-project exclusion setting. By “projects”, I meant Visual Studio projects that belong to the same Visual Studio solution.


(G Ann Campbell) #6

Hi,

Then you should look into what I described.

If it’s excluding unintended directories, then it’s not really working and needs to be rewritten to be narrower.

Ann


(Haejoong Lee) #7

Yeah, I guess it depends on how you see it. More concrete example might help here. Here’s my project directory structure.

MyApplication/
    MyApplication.sln
    ProjectA/
        ProjectA.csproj
        src/
            ...
        Scripts/
            ...
    ProjectB/
        ProjectB.csproj
        src/
            ...
        Scripts/
            ...

I want to include everything under ProjectA and ProjectB/src, but not ProjectB/Scripts/*. So, my exclusion setting is Scripts/**/*. Note that it’s not ProjectB/Scripts/**/*. I don’t know why, but sonar msbuild scanner calculates the path based on each project directory (ProjectA and ProjectB).

If I set it to ProjectB/Scripts/**/*, the computed path looks like MyApplication/ProjectA/ProjectB/Scripts/... while scanning ProjectA and MyApplication/ProjectB/ProjectB/Scripts/... while scanning ProjectB. These path don’t exist, so nothing gets excluded.

On the other hand, if I set it to Scripts/**/*, the path becomes MyApplication/ProjectA/Scripts/... while scanning ProjectA, and MyApplication/ProjectB/Scripts/... while scanning ProjectB. I didn’t want it to exclude ProjectA/Scripts.

This happens in a single run of sonar scanner.


(Haejoong Lee) #9

Any thoughts on the above please?


(Valeri Hristov) #11

Hi @Haejoong_Lee, what versions of SonarC# and Scanner for MSBuild are you using?


(Haejoong Lee) #12

Hi-- I think the version of Scanner for MSBuild is 4.3.1. I’m using it via VSTS extension. Here’s the log showing the version.

2018-09-17T19:39:02.6720086Z SonarScanner for MSBuild 4.3.1

I’m not too sure about SonarC# version.


(Valeri Hristov) #13

@Haejoong_Lee set system.debug to true when you queue a new manual build and then into the Prepare analysis on xxx logs you should find lines like this:

2018-09-18T13:33:32.5441422Z 13:33:32.543  Installing required Roslyn analyzers...
2018-09-18T13:33:32.5449989Z 13:33:32.544  Processing plugin: csharp version 7.4.0.6452

Here is a screenshot from our VSTS build:


(Colin Mueller) #14

Haejoong,

This StackOverflow question looks very similar to yours, but unfortunately it doesn’t look like there’s an easy answer for file exclusions.

Colin


(Haejoong Lee) #15

@Val I got the version number.

2018-09-18T16:07:53.6173060Z 16:07:53.615 Installing required Roslyn analyzers…
2018-09-18T16:07:53.6193750Z 16:07:53.615 Processing plugin: csharp version 7.4.0.6452

@ColinHMueller Yes, it’s the same issue. I also see that there is a 4 month old github issue by the same person.


(Valeri Hristov) #16

Hi @Haejoong_Lee, I managed to make it work. You need to specify module-based exclusions, such as this:

/d:2634460F-79A3-4EB3-AE3D-AA0F40A391FF.sonar.exclusions=Scripts/**/*

You just need to replace the GUID prefix above with the value of the element in the project you want to exclude (ProjectB in your example).

Alternative way to find the project GUID is to open .sonarqube\out\sonar-project.properties in your solution root after a successful analysis and look for lines like the following (the GUID prefix is the GUID you need):

2634460F-79A3-4EB3-AE3D-AA0F40A391FF.sonar.projectKey=cl3:2634460F-79A3-4EB3-AE3D-AA0F40A391FF
2634460F-79A3-4EB3-AE3D-AA0F40A391FF.sonar.projectName=ClassLibrary3
2634460F-79A3-4EB3-AE3D-AA0F40A391FF.sonar.projectBaseDir=c:\\Work\\ClassLibrary3\\ClassLibrary3
2634460F-79A3-4EB3-AE3D-AA0F40A391FF.sonar.sourceEncoding=utf-8
2634460F-79A3-4EB3-AE3D-AA0F40A391FF.sonar.sources=\
"c:\\Work\\ClassLibrary3\\ClassLibrary3\\Folder1\\Class1.cs",\
"c:\\Work\\ClassLibrary3\\ClassLibrary3\\Properties\\AssemblyInfo.cs"

Thanks @janos for the help!


(Haejoong Lee) #17

Thank you, @Val. I’ll give it a try and let you know.


(Haejoong Lee) #18

It worked. I don’t think it can be set from the sonarqube/sonarcloud web site. In vsts, you can set it in the “Additional Properties” config.