# Microsoft.Unity.Analyzers
**Repository Path**: luoxiao030911/Microsoft.Unity.Analyzers
## Basic Information
- **Project Name**: Microsoft.Unity.Analyzers
- **Description**: https://github.com/microsoft/Microsoft.Unity.Analyzers.git
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-03-04
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Analyzers for Unity
[](https://github.com/microsoft/Microsoft.Unity.Analyzers/actions?query=workflow%3ACI-Windows)
[](https://github.com/microsoft/Microsoft.Unity.Analyzers/actions?query=workflow%3ACI-macOS)
This project provides Visual Studio with a better understanding of Unity projects by adding Unity-specific diagnostics or by removing general C# diagnostics that do not apply to Unity projects.
Check out the [list of analyzers and suppressors](doc/index.md) defined in this project.
If you have an idea for a best practice for Unity developers to follow, please open an [issue](https://github.com/microsoft/Microsoft.Unity.Analyzers/issues/new?template=Feature_request.md) with the description.
# Prerequisites
For building and testing, you'll need the .NET Core SDK. We recommend using the **.NET Core SDK Version 3.1.100 (LTS)** or later.
This project is using the `DiagnosticSuppressor` API to conditionally suppress reported compiler/analyzer diagnostics. This API is available starting with **Visual Studio 2019 16.3** or **Visual Studio for Mac 8.3**.
On Windows, you'll need the _Visual Studio extension development_ workload installed to build a VSIX to use and debug the project in Visual Studio.
For unit-testing, we require Unity to be installed. We recommend using the latest LTS version for that.
# Building and testing
Compiling the solution:
`dotnet build .\src\Microsoft.Unity.Analyzers.sln`
Running the unit tests:
`dotnet test .\src\Microsoft.Unity.Analyzers.sln`
You can open `.\src\Microsoft.Unity.Analyzers.sln` in your favorite IDE to work on the analyzers and run/debug the tests.
# Debugging the analyzers on a Unity project
Running and debugging the tests is the easiest way to get started but sometimes you want to work on a real-life Unity project.
## On Windows
- Open the `Microsoft.Unity.Analyzers.Vsix.sln` solution.
- Make sure `Microsoft.Unity.Analyzers.Vsix` is set as the startup project.
- Hit play (Current Instance) to start debugging an experimental instance of Visual Studio 2019.
- Load any Unity project in the Visual Studio experimental instance then put breakpoints in the `Microsoft.Unity.Analyzers` project.
## On macOS
- Open the `Microsoft.Unity.Analyzers.Mpack.sln` solution.
- Make sure `Microsoft.Unity.Analyzers.Mpack` is set as the startup project.
- Hit play to start debugging an experimental instance of Visual Studio for Mac.
- Load any Unity project in the Visual Studio for Mac experimental instance then put breakpoints in the `Microsoft.Unity.Analyzers` project.
# Handling duplicate diagnostics
Starting with **Visual Studio Tools for Unity 4.3.2.0 (or 2.3.2.0 on MacOS)**, we ship and automatically include this set of analyzers/suppressors in all projects generated by Unity (using `` directive).
The downside of this is when trying to debug your own solution is to find yourself with duplicated diagnostics because Visual Studio will load both:
- the project-local analyzer that we release and include automatically, through the `` directive.
- the VSIX extension you deployed, that will apply analyzers/suppressors to all projects in the IDE.
To disable the project-local analyzer, and keeping a workflow compatible with Unity re-generating project files on all asset changes, you can add the following script in an `Editor` folder of your Unity project to disable all local analyzers loaded with `` directive.
```csharp
using UnityEditor;
using System.Text.RegularExpressions;
public class DisableLocalAnalyzersPostProcessor : AssetPostprocessor
{
public static string OnGeneratedCSProject(string path, string content)
{
return Regex.Replace(content, "(\\