SonarScanner for .NET (2024)

In version 5.0, we changed the name of the SonarScanner for MSBuild to SonarScanner for .NET.

The documentation is updated with the new name and we will call the scanner SonarScanner for .NET moving forward.

The SonarScanner for .NET is the recommended way to launch an analysis for projects built using MSBuild or dotnet. It is the result of acollaboration between SonarSource and Microsoft.

SonarScanner for .NET is distributed as a standalone command line executable, as an extension forAzure DevOps Server, and as a plugin forJenkins.

It supports .NET Core on every platform (Windows, macOS, Linux).

Prerequisites

  • At least the minimal version of Java supported by your SonarQube server
    • Java 17 is required to run this version of the scanner. If you are running a previous version of Java, you will need a previous version of the scanner.
  • The SDK corresponding to your build system:
  • The minimum supported version for SonarQube is now 8.9.
    • The scanner will fail to start if an older version of SonarQube is detected.

The flavor used to compile the Scanner for .NET (either .NET Framework, .NET Core or .NET) is independent of the .NET version the project you want to analyze has been built with. Concretely, you can analyze .NET Core code with the .NET Framework version of the Scanner. It's only relevant depending on your OS, and on the versions of .NET SDKs that are installed on your build machine.

Installation

Standalone executable

  • Expand the downloaded file into the directory of your choice. We'll refer to it as<INSTALL_DIRECTORY>in the next steps.
    • On Windows, you might need to unblock the ZIP file first (right-clickfile > Properties > Unblock).
    • On Linux/OSX you may need to set execute permissions on the files in<INSTALL_DIRECTORY>/sonar-scanner-(version)/bin.
  • Uncomment, and update the global settings to point to your SonarQube server by editing<INSTALL_DIRECTORY>/SonarQube.Analysis.xml. Values set in this file will be applied to all analyses of all projects unless overwritten locally.
    Consider setting file system permissions to restrict access to this file.
<SonarQubeAnalysisProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.sonarsource.com/msbuild/integration/2015/1"> <Property Name="sonar.host.url">http://localhost:9000</Property> <Property Name="sonar.login">[my-user-token]</Property></SonarQubeAnalysisProperties>
  • Add<INSTALL_DIRECTORY>to your PATH environment variable.

.NET Core global tool

dotnet tool install --global dotnet-sonarscanner --version x.x.x

The--versionargument is optional. If it is omitted the latest version will be installed. The full list of releases is available on theNuGet page.

.NET Core Global Tool is available from .NET Core 3.1+.

On Linux/OSX, if your SonarQube server is secured

  1. Copy the server's CA certs to/usr/local/share/ca-certificates
  2. Runsudo update-ca-certificates

Use

You can invoke the Scanner using arguments with both dash (-) or forward-slash (/) separators. Either of the following will work:

  • SonarScanner.MSBuild.exe begin /k:"project-key"
  • SonarScanner.MSBuild.exe begin -k:"project-key"

There are two versions of the SonarScanner for .NET. In the following commands, you need to pass anauthentication tokenusing thesonar.loginproperty. Any project file accepted by MSBuild.exe or dotnet can be used, for example.sln,.proj,.csproj, or.vbproj.

"Classic" .NET framework invocation

The first version is based on the "classic" .NET Framework. To use it, execute the following commands from the root folder of your project:

SonarScanner.MSBuild.exe begin /k:"project-key" /d:sonar.login="myAuthenticationToken"MSBuild.exe <path to project file or .sln file> /t:RebuildSonarScanner.MSBuild.exe end /d:sonar.login="myAuthenticationToken"

Note: On macOS or Linux, you can also usemono <path to SonarScanner.MSBuild.exe>.

.NET Core and .NET Core global tool invocation

The second version is based on .NET Core which has a very similar usage:

dotnet <path to SonarScanner.MSBuild.dll> begin /k:"project-key" /d:sonar.login="<token>"dotnet build <path to project file or .sln file>dotnet <path to SonarScanner.MSBuild.dll> end /d:sonar.login="<token>" 

The .NET Core version can also be used as a .NET Core Global Tool. After installing the Scanner as a global tool as described above it can be invoked as follows:

dotnet tool install --global dotnet-sonarscannerdotnet sonarscanner begin /k:"project-key" /d:sonar.login="<token>"dotnet build <path to project file or .sln file>dotnet sonarscanner end /d:sonar.login="<token>"
Scanner FlavorInvocation
.NET Core Global Tooldotnet sonarscanner beginetc.
.NET Core 3.1+dotnet <path to SonarScanner.MSBuild.dll>etc.
.NET Framework 4.6.2+SonarScanner.MSBuild.exe beginetc.

Notes:

  • The .NET Core version of the scanner does not support TFS XAML builds and automatic finding/conversion of Code Coverage files. Apart from that, all versions of the Scanner have the same capabilities and command line arguments.

Analysis steps

Begin

The begin step is executed when you add thebegincommand line argument. It hooks into the build pipeline, downloads SonarQube quality profiles and settings, and prepares your project for analysis.

Command Line Parameters:

ParameterDescription
/k:<project-key>[required] Specifies the key of the analyzed project in SonarQube
/n:<project name>[optional] Specifies the name of the analyzed project in SonarQube. Adding this argument will overwrite the project name in SonarQube if it already exists.
/v:<version>[recommended] Specifies the version of your project.
/d:sonar.login=<token>[recommended] Specifies theauthentication tokenused to authenticate with to SonarQube. If this argument is added to the begin step, it must also be added to the end step.
/d:sonar.clientcert.path=<ClientCertificatePath>[optional] Specifies the path to a client certificate used to access SonarQube. The certificate must be password protected.
/d:sonar.clientcert.password=<ClientCertificatePassword>[optional] Specifies the password for the client certificate used to access SonarQube. Required if a client certificate is used.
/d:sonar.verbose=true[optional] Sets the logging verbosity to detailed. Add this argument before sending logs for troubleshooting.
/d:sonar.dotnet.excludeTestProjects=true[optional] Excludes Test Projects from analysis. Add this argument to improve build performance when issues should not be detected in Test Projects.
/d:<analysis-parameter>=<value>[optional] Specifies an additional SonarQubeanalysis parameter, you can add this argument multiple times.
/s:<custom.analysis.xml>[optional] Overrides the$install_directory/SonarQube.Analysis.xml. You need to give the absolute path to the file.

For detailed information about all available parameters, seeanalysis parameters.

The "begin" step will modify your build like this:

  • the activeCodeAnalysisRuleSetwill be updated to match the SonarQube quality profile
  • WarningsAsErrorswill be turned off

If your build process cannot tolerate these changes we recommend creating a second build job for SonarQube analysis.

Build

Between thebeginandendsteps, you need to build your project, execute tests and generate code coverage data. This part is specific to your needs and it is not detailed here. See.NET test coveragefor details.

End

The end step is executed when you add the "end" command line argument. It cleans the MSBuild/dotnet build hooks, collects the analysis data generated by the build, the test results, the code coverage and then uploads everything to SonarQube

There are only two additional arguments that are allowed for the end step:

ParameterDescription
/d:sonar.login=<token>This argument is required if it was added to the begin step.
/d:sonar.clientcert.password=<ClientCertificatePassword>This argument is required if it was added to the begin step. Specifies the password for the client certificate used to access SonarQube.

Known limitations

  • MSBuild versions older than 15 are not supported.
  • Web Application projects are supported. Legacy Web Site projects are not.
  • Projects targeting multiple frameworks and using preprocessor directives could have slightly inaccurate metrics (lines of code, complexity, etc.) because the metrics are calculated only from the first of the built targets.

Code coverage

See.NET test coveragefor details.

Excluding projects from analysis

Some project types, such asMicrosoft Fakes, are automatically excluded from analysis. To manually exclude a different type of project from the analysis, place the following in its .xxproj file.

<!-- in .csproj –-><PropertyGroup> <!-- Exclude the project from analysis --> <SonarQubeExclude>true</SonarQubeExclude></PropertyGroup>

Advanced topics

Analyzing MSBuild 12, 14, and 15 projects with MSBuild 16

The Sonar Scanner for .NET requires your project to be built with MSBuild 14.0. We recommend installing Visual Studio 2017 or later on the analysis machine in order to benefit from the integration and features provided with the Visual Studio ecosystem (VSTest, MSTest unit tests, etc.).

Projects targeting older versions of the .NET Framework can be built using MSBuild 16 by setting the "TargetFrameworkVersion" MSBuild property as documented by Microsoft:

For example, if you want to build a .NET 3.5 project, but you are using a newer MSBuild version:

MSBuild.exe /t:Rebuild /p:TargetFramework=net35

If you do not want to switch your production build to MSBuild 16, you can set up a separate build dedicated to the SonarQube analysis.

Detection of test projects

You can read a full description of that subject on our wikihere.

Per-project analysis parametersSome analysis parameters can be set for a single MSBuild project by adding them to its .csproj file.

<!-- in .csproj --><ItemGroup> <SonarQubeSetting Include="sonar.stylecop.projectFilePath"> <Value>$(MSBuildProjectFullPath)</Value> </SonarQubeSetting></ItemGroup>

Analyzing languages other than C# and VB

For newer SDK-style projects (used by .NET Core, .NET 5, and later), the SonarScanner for .NET will analyze all file types that are supported by the available language plugins unless explicitly excluded.

For older-style projects, the scanner will only analyze files that are listed in the.csprojor.vbprojproject file. Normally this means that only C# and VB files will be analyzed. To enable the analysis of other types of files, include them in the project file.

More specifically, any files included by an element of one of theItemTypesinthis listwill be analyzed automatically. For example, the following line in your.csprojor.vbprojfile

<Content Include="foo\bar\*.js" />

will enable the analysis of all JS files in the directoryfoo\barbecauseContentis one of theItemTypeswhose includes are automatically analyzed.

You can also addItemTypesto the default list by following these directions.

You can check which files the scanner will analyze by looking in the file .sonarqube\out\sonar-project.properties after MSBuild has finished.

Using SonarScanner for .NET with a proxy
On build machines that connect to the Internet through a proxy server you might experience difficulties connecting to SonarQube. To instruct the Java VM to use the system proxy settings, you need to set the following environment variable before running the SonarScanner for .NET:

SONAR_SCANNER_OPTS = "-Djava.net.useSystemProxies=true"

To instruct the Java VM to use specific proxy settings or when there is no system-wide configuration use the following value:

SONAR_SCANNER_OPTS = "-Dhttp.proxyHost=yourProxyHost -Dhttp.proxyPort=yourProxyPort"

WhereyourProxyHostandyourProxyPortare the hostname and the port of your proxy server. There are additional proxy settings for HTTPS, authentication and exclusions that could be passed to the Java VM. For more information see the following article:https://docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html.

You also need to set the appropriate proxy environment variables used by .NET.HTTP_PROXY,HTTPS_PROXY,ALL_PROXY, andNO_PROXYare all supported. You can find more detailshere.

Known issues

I have multiple builds in the same pipeline, each of them getting analyzed even if the Run Code Analysis has already been executed

We don't uninstall the globalImportBeforetargets to support concurrent analyses on the same machine. The main effect is that if you build a solution where a .sonarqube folder is located nearby, then the sonar-dotnet analyzer will be executed along your build task.

To avoid that, you can disable the targets file by adding a build parameter:

msbuild /p:SonarQubeTargetsImported=truedotnet build -p:SonarQubeTargetsImported=true
SonarScanner for .NET (2024)

FAQs

What is the use of SonarScanner in dotnet? ›

The SonarScanner for . NET is the recommended way to launch a SonarQube or SonarCloud analysis for Clean Code projects/solutions using MSBuild or dotnet command as a build tool.

What is the difference between SonarLint and SonarScanner? ›

- SonarLint will scan all the files recursively from your current directory. With sonar-scanner you usually pass -Dsonar. sources=<a source folder> so only files in this folder are scanned.

How to install dotnet sonar-scanner? ›

Installation
  1. Expand the downloaded file into the directory of your choice. We'll refer to it as <INSTALL_DIRECTORY> in the next steps. ...
  2. Uncomment, and update the global settings to point to your SonarQube server by editing <INSTALL_DIRECTORY>/SonarQube. Analysis.

What is SonarScanner used for? ›

The SonarScanner is the scanner to use when there is no specific scanner for your build system.

How to use WSDL in .NET core? ›

Consume WSDL in . NET Core
  1. Generate reference code from a WSDL file, Right click on “Manage Connected Services”
  2. Click on “Add a service reference”
  3. Select “WCF Web Service “
  4. Insert the WSDL URI. ...
  5. Clicking “Next” allows configuration, ...
  6. In the final configuration screen,
Feb 27, 2024

What are the top 3 benefits of SonarQube? ›

The Benefits of SonarQube Source Code Coverage
  • Improve quality.
  • Grow developer skills.
  • Continuous quality management.
  • Reduce risk.
  • Scale with ease.
Jun 26, 2023

Are there alternatives to sonar? ›

Other important factors to consider when researching alternatives to SonarQube include projects and integration. The best overall SonarQube alternative is Embold. Other similar apps like SonarQube are GitHub, GitLab, Coverity, and Checkmarx.

Is sonar lint good? ›

Also, writing quality and performant code helps your program or website work as expected – which should be every developer's goal. SonarLint is a tool that helps you make sure your code is top-notch. It's like having a friendly guide who checks your code to see if it's well-written and doesn't have mistakes.

Does SonarQube support C#? ›

Sonar empowers developers to write Clean C# Code

The SonarQube user interface highlights the health of your New Code (changed or added) so you'll clearly know when your code is solid.

How to configure SonarQube for .net project? ›

Run Code Analysis in SonarQube for . NET
  1. Open the Web Portal and log in.
  2. Go to “Create Project” .
  3. Enter “Project Display Name” and “Project Key”.
  4. Click on Setup.
  5. Choose the option from Analyze methods. (“ ...
  6. Provide a Token: Enter Token name for generate a token. ( ...
  7. Run analysis on your project: Choose the project type as .
Nov 26, 2023

How do I manually run a sonar scan? ›

To run SonarScanner CLI from the zip file, follow these steps:
  1. Expand the downloaded file into the directory of your choice. ...
  2. Add the <INSTALL_DIRECTORY>/bin directory to your path.
  3. Verify your installation by opening a new shell and executing the command sonar-scanner -h , or sonar-scanner.bat -h on Windows.

What is the difference between SonarQube and SonarLint? ›

1 - SonarQube is a server on which projects are added and analyzed. SonarLint is a plugin that is used in the IDE (Visual Studio, Eclipse, among others). 2 - SonarLint detects errors while writing the code (as a spell checker). SonarQube provides a 360º view of the code status of a project.

How to integrate SonarQube with code? ›

In the Build Environment section, select the checkbox Prepare SonarQube Scanner environment. Add the ALM Octane SonarQube listener build step before your Maven command. Select one or both of the checkboxes for the data you want integrated: Push Vulnerabilities and Push Coverage.

What is the use of Sonar plugin? ›

Sonar Plugin API

The sonar-plugin-api is a Java API that is used to develop plugins. The API used to be part of SonarQube and released with it, but it is a separate component since v9. 5, with its own releases. You can find it here: sonar-plugin-api .

What is the use of SonarQube server? ›

SonarQube is a self-managed, automatic code review tool that systematically helps you deliver Clean Code. As a core element of our Sonar solution , SonarQube integrates into your existing workflow and detects issues in your code to help you perform continuous code inspections of your projects.

How do I start SonarScanner? ›

To run SonarScanner from the zip file, follow these steps:
  1. Expand the downloaded file into the directory of your choice. ...
  2. Add the <INSTALL_DIRECTORY>/bin directory to your path.
  3. Verify your installation by opening a new shell and executing the command sonar-scanner -h ( sonar-scanner.bat -h on Windows).

Why do we use SonarCloud? ›

SonarCloud is designed to help you achieve a state of Clean Code, that is, code with attributes that contribute to making your software reliable, maintainable, and secure. To do this, SonarCloud identifies both issues and security hotspots in your code.

References

Top Articles
Latest Posts
Article information

Author: Francesca Jacobs Ret

Last Updated:

Views: 6331

Rating: 4.8 / 5 (48 voted)

Reviews: 87% of readers found this page helpful

Author information

Name: Francesca Jacobs Ret

Birthday: 1996-12-09

Address: Apt. 141 1406 Mitch Summit, New Teganshire, UT 82655-0699

Phone: +2296092334654

Job: Technology Architect

Hobby: Snowboarding, Scouting, Foreign language learning, Dowsing, Baton twirling, Sculpting, Cabaret

Introduction: My name is Francesca Jacobs Ret, I am a innocent, super, beautiful, charming, lucky, gentle, clever person who loves writing and wants to share my knowledge and understanding with you.