# IDE0005 as Build Error

I recently set up the IDE0005 .editorconfig file rule to break the CLI build. This is an IDE rule, that normally is not emitted as warnings / errors in the CLI build.

[IDE0005](https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/ide0005) rule flags unnecessary using directives. It wraps `CS8019` that also does the same.

## Setup 

Add an `.editorconfig` file containing the rule and set the severity as a *warning*. It may be also set as an *error* if one prefers to get a build error without setting warnings to break builds.

```
[*.cs]

dotnet_diagnostic.IDE0005.severity = warning
```

To make it effective we need to set two further property group flags that are detailed in this GitHub [issue](https://github.com/dotnet/roslyn/issues/41640):

```xml
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
```

With these settings the warnings/errors are emitted during build CLI build and not just in the IDE.

## Multiple Projects

Instead of settings these two msbuild properties on every project in a larger solution, I set them in a `Directory.Build.props` and `Directory.Build.targets` files.

There are multiple ways to set msbuild properties, but in this blog post, I will focus on the `Directory.Build.*` option to have a greater control over which projects enforce the above rule. More specifically, I would like to avoid test projects to enforce IDE0005 rule.

To achieve this, one could organize all test projects under a single folder that has a folder level `Directory.Build.props` file with disabling the rules. However, this is not always possible in existing solutions where test projects are separated into different folders.

An alternative approach is to set `<GenerateDocumentationFile>true</GenerateDocumentationFile>` in `Directory.Build.props` file and set the following snippet in `Directory.Build.targets` file.

```xml
<PropertyGroup Condition="'$(IsTestProject)' != 'true'">
    <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>
```

This way the emitting the compiler flag is protected with a condition that check another property's value.

Finally flag the unit test csproj-s with `<IsTestProject>true</IsTestProject>` property. With such a generic flags one can control the build properties for test projects in a single file even when these projects are not under a dedicated folder.