-
Notifications
You must be signed in to change notification settings - Fork 77
Connected Mode configuration for C# and Visual Basic projects
The content on this page has moved: https://docs.sonarsource.com/sonarlint/visual-studio/previous-versions/#connected-mode-for-c-and-vb-projects-v616-and-earlier
The SonarLint documentation has moved! Please visit https://docs.sonarsource.com/sonarlint/visual-studio/ to have a look at the new documentation website. We’ve improved the documentation as a whole, integrated the four SonarLint IDE extension docs together, and moved everything under the sonarsource.com domain to share a home with the SonarQube docs (SonarCloud to come in Q3 of 2023).
These GitHub wikis will no longer be updated after October 1st, 2023 but no worries, we’ll keep them around a while for those running previous versions of SonarLint for Visual Studio.
From version 7.0, SonarLint for Visual Studio improved the Connected Mode setup. This means that SonarLint no longer saves its .ruleset
and SonarLint.xml
files inside C# or VB.NET solution directories; if you’re using the latest version of SonarLint, this page is no longer relevant.
If you’re using SonarLint for Visual Studio v6.16 or earlier, please use the binding instructions below to set up your C# and VB.NET solution folders correctly.
What configuration does SLVS add to my C#/VB.NET projects when binding to a SonarQube/SonarCloud server?
When binding to SonarQube/SonarCloud, SLVS generates configuration files that are needed for Sonar C# and Sonar VB.NET analyzers. The following configuration files are generated for each language:
- a
.ruleset
file that contains the rules configuration corresponding to the Quality Profile (See the Microsoft documentation for Rule sets) - a
SonarLint.xml
file which contains the rules parameters for Sonar C# and Sonar VB.NET analyzers.
The configuration files are located under the .sonarlint
folder in your solution directory.
Each non-test project under your solution needs to reference all of these files in order to be considered as “correctly bound”. If one of the configuration files is not referenced, the project is considered as unbound and SLVS will prompt you to bind it.
The generated ruleset is specified in the CodeAnalysisRuleSet
property e.g.
<PropertyGroup>
<CodeAnalysisRuleSet>path-to-generated-ruleset.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
The SonarLint.xml
file is referenced as an AdditionalFiles
item e.g.
<ItemGroup>
<AdditionalFiles Include="..\.sonarlint\{language}\SonarLint.xml" />
</ItemGroup>
If SLVS recognizes that the project does not reference the generated .ruleset
file, SLVS will reference it using the following logic:
If the project has no CodeAnalysisRuleSet
properties, SLVS will create one and point to the generated .ruleset
file. So your project will look like this:
<PropertyGroup>
<CodeAnalysisRuleSet>path-to-generated-ruleset.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
If the project has a CodeAnalysisRuleSet
property that points to a .ruleset
file that is located under the project’s directory, SLVS will amend that ruleset to reference the generated .ruleset
file. So your project’s ruleset file will look like this:
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="My ruleset" Description="test" ToolsVersion="16.0">
<Include Path="path-to-generated-ruleset.ruleset" Action="Default" />
...
If the project has a CodeAnalysisRuleSet
property that points to a .ruleset
file that is not located under the project’s directory, SLVS will create a new .ruleset
file and place it under your project’s directory. The new ruleset file references your previous ruleset and Sonar’s generated .ruleset
file. So the new ruleset file will look like this:
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="SonarQube - Sonar way" ToolsVersion="14.0">
<Include Path="path-to-generated-ruleset.ruleset" Action="Default" />
<Include Path="path-to-your-other-ruleset.ruleset" Action="Default" />
</RuleSet>
Yes. The initial binding described above will correctly configure your projects, but you are free to modify this using the standard capabilities of MSBuild e.g. using a Directory.Build.props
file, or putting the references in a common targets file that is included in the appropriate projects.
FYI the SonarLint for Visual Studio solution in this repo uses a Directory.Build.props
file (see here). It does not contain any project-level rulesets or settings.
See our documentation on how to configure a reference to project rulesets, and Microsoft’s documentation for customizing your build.