diff --git a/WebSocketChannel.sln b/WebSocketChannel.sln
index 4c9a623..579ace2 100644
--- a/WebSocketChannel.sln
+++ b/WebSocketChannel.sln
@@ -13,7 +13,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebSocketChannel", "src\Web
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests", "src\Tests\Tests.csproj", "{517F1129-4EA6-46FA-827B-42CF5EB0DE09}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Benchmark", "src\Benchmark\Benchmark.csproj", "{694ED796-BC51-4B41-85B0-961E79A424DC}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Benchmark", "src\Benchmark\Benchmark.csproj", "{694ED796-BC51-4B41-85B0-961E79A424DC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "src\CodeAnalysis\CodeAnalysis.csproj", "{E37B743E-69A4-4A24-AD41-9FD3F268A5DF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -33,6 +35,10 @@ Global
{694ED796-BC51-4B41-85B0-961E79A424DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{694ED796-BC51-4B41-85B0-961E79A424DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{694ED796-BC51-4B41-85B0-961E79A424DC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E37B743E-69A4-4A24-AD41-9FD3F268A5DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E37B743E-69A4-4A24-AD41-9FD3F268A5DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E37B743E-69A4-4A24-AD41-9FD3F268A5DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E37B743E-69A4-4A24-AD41-9FD3F268A5DF}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/CodeAnalysis/CodeAnalysis.csproj b/src/CodeAnalysis/CodeAnalysis.csproj
new file mode 100644
index 0000000..2d78bdd
--- /dev/null
+++ b/src/CodeAnalysis/CodeAnalysis.csproj
@@ -0,0 +1,16 @@
+
+
+
+ netstandard2.0
+ WebSocketChannel.CodeAnalysis
+ analyzers/dotnet/roslyn4.0
+
+
+
+
+
+
+
+
+
+
diff --git a/src/CodeAnalysis/SponsorLinker.cs b/src/CodeAnalysis/SponsorLinker.cs
new file mode 100644
index 0000000..6babed8
--- /dev/null
+++ b/src/CodeAnalysis/SponsorLinker.cs
@@ -0,0 +1,20 @@
+using System;
+using Devlooped;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Diagnostics;
+
+namespace Mvp.Xml;
+
+[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic, LanguageNames.FSharp)]
+class SponsorLinker : SponsorLink
+{
+ public SponsorLinker() : base(SponsorLinkSettings.Create(
+ "devlooped", "WebSocketChannel",
+ diagnosticsIdPrefix: "WSC",
+ version: new Version(ThisAssembly.Info.Version).ToString(3)
+#if DEBUG
+ , quietDays: 0
+#endif
+ ))
+ { }
+}
\ No newline at end of file
diff --git a/src/WebSocketChannel/WebSocketChannel.csproj b/src/WebSocketChannel/WebSocketChannel.csproj
index d8c193c..31d149c 100644
--- a/src/WebSocketChannel/WebSocketChannel.csproj
+++ b/src/WebSocketChannel/WebSocketChannel.csproj
@@ -1,4 +1,4 @@
-
+
netstandard2.1
@@ -10,8 +10,13 @@
+
+
+
+
+