Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

.Net: Add Anthropic Connector #7364

Open
wants to merge 20 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
3dd68cf
.Net: Anthropic initial (#5739)
Krzysztof318 Apr 4, 2024
ca7e8c7
Merge branch 'main' into anthropic/main-merge
Krzysztof318 Apr 16, 2024
d0b4b0f
.Net: Claude service and DI (#5794)
Krzysztof318 Apr 16, 2024
1a475fb
.Net: Claude tools models (#5790)
Krzysztof318 Apr 17, 2024
2aeb9e7
Merge branch 'refs/heads/main' into feature-connectors-anthropic
Krzysztof318 Jun 30, 2024
6986704
Fix unit tests after main merge
Krzysztof318 Jun 30, 2024
2da5840
Merge branch 'main' into feature-connectors-anthropic
RogerBarreto Jul 19, 2024
f30c5f9
Merge branch 'main' into feature-connectors-anthropic
RogerBarreto Jul 22, 2024
5040bed
Merge branch 'main' into feature-connectors-anthropic
RogerBarreto Jul 24, 2024
0c8ba96
Merge branch 'main' into feature-connectors-anthropic
RogerBarreto Jul 25, 2024
6273a71
Merge branch 'main' into feature-connectors-anthropic
RogerBarreto Jul 29, 2024
0a4df86
.Net: Anthropic chat generation (non-streaming) and removed FC (#7101)
Krzysztof318 Jul 29, 2024
af2393a
Merge branch 'main' into feature-connectors-anthropic
RogerBarreto Sep 6, 2024
e96eb90
Merge branch 'main' into feature-connectors-anthropic
RogerBarreto Sep 10, 2024
28cadcc
.Net: Anthropic - samples (#8585)
Krzysztof318 Sep 10, 2024
30b503a
Merge branch 'main' into feature-connectors-anthropic
RogerBarreto Sep 13, 2024
2f47d9b
Merge branch 'main' into feature-connectors-anthropic
RogerBarreto Sep 16, 2024
86e169a
Merge branch 'main' into feature-connectors-anthropic
RogerBarreto Oct 10, 2024
17cfd02
.Net: Anthropic - streaming (#8560)
Krzysztof318 Oct 29, 2024
f13666b
Merge branch 'main' into feature-connectors-anthropic
RogerBarreto Oct 29, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions dotnet/SK-dotnet.sln
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Connectors.Redis.UnitTests"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Connectors.Qdrant.UnitTests", "src\Connectors\Connectors.Qdrant.UnitTests\Connectors.Qdrant.UnitTests.csproj", "{E92AE954-8F3A-4A6F-A4F9-DC12017E5AAF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Connectors.Anthropic", "src\Connectors\Connectors.Anthropic\Connectors.Anthropic.csproj", "{A77031AC-5A71-4061-9451-923D3A5541E4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Connectors.Anthropic.UnitTests", "src\Connectors\Connectors.Anthropic.UnitTests\Connectors.Anthropic.UnitTests.csproj", "{3186E348-3558-42E6-B1DE-D24B816F46C5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Connectors.Ollama", "src\Connectors\Connectors.Ollama\Connectors.Ollama.csproj", "{E7E60E1D-1A44-4DE9-A44D-D5052E809DDD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Connectors.AzureCosmosDBMongoDB.UnitTests", "src\Connectors\Connectors.AzureCosmosDBMongoDB.UnitTests\Connectors.AzureCosmosDBMongoDB.UnitTests.csproj", "{2918478E-BC86-4D53-9D01-9C318F80C14F}"
Expand Down Expand Up @@ -859,6 +863,18 @@ Global
{E92AE954-8F3A-4A6F-A4F9-DC12017E5AAF}.Publish|Any CPU.Build.0 = Debug|Any CPU
{E92AE954-8F3A-4A6F-A4F9-DC12017E5AAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E92AE954-8F3A-4A6F-A4F9-DC12017E5AAF}.Release|Any CPU.Build.0 = Release|Any CPU
{A77031AC-5A71-4061-9451-923D3A5541E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A77031AC-5A71-4061-9451-923D3A5541E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A77031AC-5A71-4061-9451-923D3A5541E4}.Publish|Any CPU.ActiveCfg = Debug|Any CPU
{A77031AC-5A71-4061-9451-923D3A5541E4}.Publish|Any CPU.Build.0 = Debug|Any CPU
{A77031AC-5A71-4061-9451-923D3A5541E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A77031AC-5A71-4061-9451-923D3A5541E4}.Release|Any CPU.Build.0 = Release|Any CPU
{3186E348-3558-42E6-B1DE-D24B816F46C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3186E348-3558-42E6-B1DE-D24B816F46C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3186E348-3558-42E6-B1DE-D24B816F46C5}.Publish|Any CPU.ActiveCfg = Debug|Any CPU
{3186E348-3558-42E6-B1DE-D24B816F46C5}.Publish|Any CPU.Build.0 = Debug|Any CPU
{3186E348-3558-42E6-B1DE-D24B816F46C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3186E348-3558-42E6-B1DE-D24B816F46C5}.Release|Any CPU.Build.0 = Release|Any CPU
{E7E60E1D-1A44-4DE9-A44D-D5052E809DDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E7E60E1D-1A44-4DE9-A44D-D5052E809DDD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E7E60E1D-1A44-4DE9-A44D-D5052E809DDD}.Publish|Any CPU.ActiveCfg = Publish|Any CPU
Expand Down Expand Up @@ -1151,6 +1167,10 @@ Global
{1D3EEB5B-0E06-4700-80D5-164956E43D0A} = {5D4C0700-BBB5-418F-A7B2-F392B9A18263}
{F312FCE1-12D7-4DEF-BC29-2FF6618509F3} = {5D4C0700-BBB5-418F-A7B2-F392B9A18263}
{B0B3901E-AF56-432B-8FAA-858468E5D0DF} = {24503383-A8C4-4255-9998-28D70FE8E99A}
{1D4667B9-9381-4E32-895F-123B94253EE8} = {0247C2C9-86C3-45BA-8873-28B0948EDC0C}
{E92AE954-8F3A-4A6F-A4F9-DC12017E5AAF} = {0247C2C9-86C3-45BA-8873-28B0948EDC0C}
{A77031AC-5A71-4061-9451-923D3A5541E4} = {1B4CBDE0-10C2-4E7D-9CD0-FE7586C96ED1}
{3186E348-3558-42E6-B1DE-D24B816F46C5} = {1B4CBDE0-10C2-4E7D-9CD0-FE7586C96ED1}
{1D4667B9-9381-4E32-895F-123B94253EE8} = {5A7028A7-4DDF-4E4F-84A9-37CE8F8D7E89}
{E92AE954-8F3A-4A6F-A4F9-DC12017E5AAF} = {5A7028A7-4DDF-4E4F-84A9-37CE8F8D7E89}
{E7E60E1D-1A44-4DE9-A44D-D5052E809DDD} = {1B4CBDE0-10C2-4E7D-9CD0-FE7586C96ED1}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
// Copyright (c) Microsoft. All rights reserved.

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;

namespace ChatCompletion;

public sealed class Anthropic_ChatCompletion(ITestOutputHelper output) : BaseTest(output)
{
[Fact]
public async Task SampleAsync()
{
Console.WriteLine("============= Anthropic - Claude Chat Completion =============");

string apiKey = TestConfiguration.AnthropicAI.ApiKey;
string modelId = TestConfiguration.AnthropicAI.ModelId;

Assert.NotNull(apiKey);
Assert.NotNull(modelId);

Kernel kernel = Kernel.CreateBuilder()
.AddAnthropicChatCompletion(
modelId: modelId,
apiKey: apiKey)
.Build();

await SimpleChatAsync(kernel);
}

private async Task SimpleChatAsync(Kernel kernel)
{
Console.WriteLine("======== Simple Chat ========");

var chatHistory = new ChatHistory("You are an expert in the tool shop.");
var chat = kernel.GetRequiredService<IChatCompletionService>();

// First user message
chatHistory.AddUserMessage("Hi, I'm looking for new power tools, any suggestion?");
await MessageOutputAsync(chatHistory);

// First bot assistant message
var reply = await chat.GetChatMessageContentAsync(chatHistory);
chatHistory.Add(reply);
await MessageOutputAsync(chatHistory);

// Second user message
chatHistory.AddUserMessage("I'm looking for a drill, a screwdriver and a hammer.");
await MessageOutputAsync(chatHistory);

// Second bot assistant message
reply = await chat.GetChatMessageContentAsync(chatHistory);
chatHistory.Add(reply);
await MessageOutputAsync(chatHistory);
}

/// <summary>
/// Outputs the last message of the chat history
/// </summary>
private Task MessageOutputAsync(ChatHistory chatHistory)
{
var message = chatHistory.Last();

Console.WriteLine($"{message.Role}: {message.Content}");
Console.WriteLine("------------------------");

return Task.CompletedTask;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
// Copyright (c) Microsoft. All rights reserved.

using System.Text;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;

namespace ChatCompletion;

public sealed class Anthropic_ChatCompletionStreaming(ITestOutputHelper output) : BaseTest(output)
{
[Fact]
public async Task SampleAsync()
{
Console.WriteLine("============= Anthropic - Claude Chat Streaming =============");

string apiKey = TestConfiguration.AnthropicAI.ApiKey;
string modelId = TestConfiguration.AnthropicAI.ModelId;

Assert.NotNull(apiKey);
Assert.NotNull(modelId);

Kernel kernel = Kernel.CreateBuilder()
.AddAnthropicChatCompletion(
modelId: modelId,
apiKey: apiKey)
.Build();

await this.StreamingChatAsync(kernel);
}

private async Task StreamingChatAsync(Kernel kernel)
{
Console.WriteLine("======== Streaming Chat ========");

var chatHistory = new ChatHistory("You are an expert in the tool shop.");
var chat = kernel.GetRequiredService<IChatCompletionService>();

// First user message
chatHistory.AddUserMessage("Hi, I'm looking for alternative coffee brew methods, can you help me?");
await MessageOutputAsync(chatHistory);

// First bot assistant message
var streamingChat = chat.GetStreamingChatMessageContentsAsync(chatHistory);
var reply = await MessageOutputAsync(streamingChat);
chatHistory.Add(reply);

// Second user message
chatHistory.AddUserMessage("Give me the best speciality coffee roasters.");
await MessageOutputAsync(chatHistory);

// Second bot assistant message
streamingChat = chat.GetStreamingChatMessageContentsAsync(chatHistory);
reply = await MessageOutputAsync(streamingChat);
chatHistory.Add(reply);
}

/// <summary>
/// Outputs the last message of the chat history
/// </summary>
private Task MessageOutputAsync(ChatHistory chatHistory)
{
var message = chatHistory.Last();

Console.WriteLine($"{message.Role}: {message.Content}");
Console.WriteLine("------------------------");

return Task.CompletedTask;
}

private async Task<ChatMessageContent> MessageOutputAsync(IAsyncEnumerable<StreamingChatMessageContent> streamingChat)
{
bool first = true;
StringBuilder messageBuilder = new();
await foreach (var chatMessage in streamingChat)
{
if (first)
{
Console.Write($"{chatMessage.Role}: ");
first = false;
}

Console.Write(chatMessage.Content);
messageBuilder.Append(chatMessage.Content);
}

Console.WriteLine();
Console.WriteLine("------------------------");
return new ChatMessageContent(AuthorRole.Assistant, messageBuilder.ToString());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright (c) Microsoft. All rights reserved.

using Microsoft.SemanticKernel;

namespace ChatCompletion;

/// <summary>
/// This sample shows how to setup different providers for anthropic.
/// </summary>
public sealed class Anthropic_ProvidersSetup(ITestOutputHelper output) : BaseTest(output)
{
public void AnthropicProvider()
{
var kernel = Kernel.CreateBuilder()
.AddAnthropicChatCompletion(
modelId: "modelId",
apiKey: "apiKey")
.Build();
}

/// <summary>
/// For more information on how to setup the Vertex AI provider, go to <see cref="Google_GeminiChatCompletion"/> sample.
/// </summary>
public void VertexAiProvider()
{
var kernel = Kernel.CreateBuilder()
.AddAnthropicVertextAIChatCompletion(
modelId: "modelId",
bearerTokenProvider: () => ValueTask.FromResult("bearer"),
endpoint: new Uri("https://your-endpoint"))
.Build();
}
}
52 changes: 52 additions & 0 deletions dotnet/samples/Concepts/ChatCompletion/Anthropic_Vision.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// Copyright (c) Microsoft. All rights reserved.

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Resources;

namespace ChatCompletion;

public sealed class Anthropic_Vision(ITestOutputHelper output) : BaseTest(output)
{
[Fact]
public async Task SampleAsync()
{
Console.WriteLine("============= Anthropic - Claude Chat Completion =============");

string apiKey = TestConfiguration.AnthropicAI.ApiKey;
string modelId = TestConfiguration.AnthropicAI.ModelId;

Assert.NotNull(apiKey);
Assert.NotNull(modelId);

Kernel kernel = Kernel.CreateBuilder()
.AddAnthropicChatCompletion(
modelId: modelId,
apiKey: apiKey)
.Build();

var chatHistory = new ChatHistory("Your job is describing images.");
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();

// Load the image from the resources
await using var stream = EmbeddedResource.ReadStream("sample_image.jpg")!;
using var binaryReader = new BinaryReader(stream);
var bytes = binaryReader.ReadBytes((int)stream.Length);

chatHistory.AddUserMessage(
[
new TextContent("What’s in this image?"),
// Vertex AI Gemini API supports both base64 and URI format
// You have to always provide the mimeType for the image
new ImageContent(bytes, "image/jpeg"),
// The Cloud Storage URI of the image to include in the prompt.
// The bucket that stores the file must be in the same Google Cloud project that's sending the request.
// new ImageContent(new Uri("gs://generativeai-downloads/images/scones.jpg"),
// metadata: new Dictionary<string, object?> { { "mimeType", "image/jpeg" } })
]);

var reply = await chatCompletionService.GetChatMessageContentAsync(chatHistory);

Console.WriteLine(reply.Content);
}
}
1 change: 1 addition & 0 deletions dotnet/samples/Concepts/Concepts.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
<ProjectReference Include="..\..\src\Agents\Core\Agents.Core.csproj" />
<ProjectReference Include="..\..\src\Agents\OpenAI\Agents.OpenAI.csproj" />
<ProjectReference Include="..\..\src\Connectors\Connectors.Google\Connectors.Google.csproj" />
<ProjectReference Include="..\..\src\Connectors\Connectors.Anthropic\Connectors.Anthropic.csproj" />
<ProjectReference Include="..\..\src\Connectors\Connectors.HuggingFace\Connectors.HuggingFace.csproj" />
<ProjectReference Include="..\..\src\Connectors\Connectors.Memory.AzureAISearch\Connectors.Memory.AzureAISearch.csproj" />
<ProjectReference Include="..\..\src\Connectors\Connectors.Memory.AzureCosmosDBMongoDB\Connectors.Memory.AzureCosmosDBMongoDB.csproj" />
Expand Down
4 changes: 4 additions & 0 deletions dotnet/samples/Concepts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,10 @@ dotnet test -l "console;verbosity=detailed" --filter "FullyQualifiedName=ChatCom
- [Google_GeminiChatCompletionStreaming](https://github.com/microsoft/semantic-kernel/blob/main/dotnet/samples/Concepts/ChatCompletion/Google_GeminiChatCompletionStreaming.cs)
- [Google_GeminiGetModelResult](https://github.com/microsoft/semantic-kernel/blob/main/dotnet/samples/Concepts/ChatCompletion/Google_GeminiGetModelResult.cs)
- [Google_GeminiVision](https://github.com/microsoft/semantic-kernel/blob/main/dotnet/samples/Concepts/ChatCompletion/Google_GeminiVision.cs)
- [Anthropic_ChatCompletion](https://github.com/microsoft/semantic-kernel/blob/main/dotnet/samples/Concepts/ChatCompletion/Anthropic_ChatCompletion.cs)
- [Anthropic_ChatCompletionStreaming](https://github.com/microsoft/semantic-kernel/blob/main/dotnet/samples/Concepts/ChatCompletion/Anthropic_ChatCompletionStreaming.cs)
- [Anthropic_Vision](https://github.com/microsoft/semantic-kernel/blob/main/dotnet/samples/Concepts/ChatCompletion/Anthropic_Vision.cs)
- [Anthropic_ProvidersSetup](https://github.com/microsoft/semantic-kernel/blob/main/dotnet/samples/Concepts/ChatCompletion/Anthropic_ProvidersSetup.cs)
- [OpenAI_ChatCompletion](https://github.com/microsoft/semantic-kernel/blob/main/dotnet/samples/Concepts/ChatCompletion/OpenAI_ChatCompletion.cs)
- [OpenAI_ChatCompletionStreaming](https://github.com/microsoft/semantic-kernel/blob/main/dotnet/samples/Concepts/ChatCompletion/OpenAI_ChatCompletionStreaming.cs)
- [OpenAI_ChatCompletionWithVision](https://github.com/microsoft/semantic-kernel/blob/main/dotnet/samples/Concepts/ChatCompletion/OpenAI_ChatCompletionWithVision.cs)
Expand Down
1 change: 1 addition & 0 deletions dotnet/samples/Demos/AIModelRouter/AIModelRouter.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\src\Connectors\Connectors.Anthropic\Connectors.Anthropic.csproj" />
<ProjectReference Include="..\..\..\src\Connectors\Connectors.AzureAIInference\Connectors.AzureAIInference.csproj" />
<ProjectReference Include="..\..\..\src\Connectors\Connectors.Ollama\Connectors.Ollama.csproj" />
<ProjectReference Include="..\..\..\src\Connectors\Connectors.Onnx\Connectors.Onnx.csproj" />
Expand Down
12 changes: 11 additions & 1 deletion dotnet/samples/Demos/AIModelRouter/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,16 @@ private static async Task Main(string[] args)
Console.WriteLine("• Azure AI Inference Added - Use \"azureai\" in the prompt.");
}

if (config["Anthropic:ApiKey"] is not null)
{
services.AddAnthropicChatCompletion(
serviceId: "anthropic",
modelId: config["Anthropic:ModelId"] ?? "claude-3-5-sonnet-20240620",
apiKey: config["Anthropic:ApiKey"]!);

Console.WriteLine("• Anthropic Added - Use \"anthropic\" in the prompt.");
}

// Adding a custom filter to capture router selected service id
services.AddSingleton<IPromptRenderFilter>(new SelectedServiceFilter());

Expand All @@ -92,7 +102,7 @@ private static async Task Main(string[] args)
// Find the best service to use based on the user's input
KernelArguments arguments = new(new PromptExecutionSettings()
{
ServiceId = router.FindService(userMessage, ["lmstudio", "ollama", "openai", "onnx", "azureai"])
ServiceId = router.FindService(userMessage, ["lmstudio", "ollama", "openai", "onnx", "azureai", "anthropic"])
});

// Invoke the prompt and print the response
Expand Down
24 changes: 21 additions & 3 deletions dotnet/samples/Demos/AIModelRouter/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,17 @@ The sample can be configured by using the command line with .NET [Secret Manager

```powershell
dotnet user-secrets set "OpenAI:ApiKey" "... your api key ... "
dotnet user-secrets set "OpenAI:ModelId" ".. Openai model .. " (default: gpt-4o)
dotnet user-secrets set "OpenAI:ModelId" ".. Openai model id .. " (default: gpt-4o)

dotnet user-secrets set "Anthropic:ApiKey" "... your api key ... "
dotnet user-secrets set "Anthropic:ModelId" "... Anthropic model id .. " (default: claude-3-5-sonnet-20240620)

dotnet user-secrets set "Ollama:ModelId" ".. Ollama model id .. "
dotnet user-secrets set "Ollama:Endpoint" ".. Ollama endpoint .. " (default: http://localhost:11434)

dotnet user-secrets set "LMStudio:Endpoint" ".. LM Studio endpoint .. " (default: http://localhost:1234)
dotnet user-secrets set "Onnx:ModelId" ".. Onnx model id"

dotnet user-secrets set "Onnx:ModelId" ".. Onnx model id .. "
dotnet user-secrets set "Onnx:ModelPath" ".. your Onnx model folder path .."
```

Expand All @@ -53,4 +59,16 @@ dotnet run

> **User** > LMStudio, what is Jupiter? Keep it simple.

> **Assistant** > Jupiter is the fifth planet from the Sun in our Solar System and one of its gas giants alongside Saturn, Uranus, and Neptune. It's famous for having a massive storm called the Great Red Spot that has been raging for hundreds of years.
> **Assistant** > Jupiter is the fifth planet from the Sun in our Solar System and one of its gas giants alongside Saturn, Uranus, and Neptune. It's famous for having a massive storm called the Great Red Spot that has been raging for hundreds of years.

> **User** > AzureAI, what is Jupiter? Keep it simple.

> **Assistant** > Jupiter is the fifth planet from the Sun in our Solar System and one of its gas giants alongside Saturn, Uranus, and Neptune. It's famous for having a massive storm called the Great Red Spot that has been raging for hundreds of years.

> **User** > Anthropic, what is Jupiter? Keep it simple.

> **Assistant** > Jupiter is the fifth planet from the Sun in our Solar System and one of its gas giants alongside Saturn, Uranus, and Neptune. It's famous for having a massive storm called the Great Red Spot that has been raging for hundreds of years.

> **User** > ONNX, what is Jupiter? Keep it simple.

> **Assistant** > Jupiter is the fifth planet from the Sun in our Solar System and one of its gas giants alongside Saturn, Uranus, and Neptune. It's famous for having a massive storm called the Great Red Spot that has been raging for hundreds of years.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Suppressing errors for Test projects under dotnet folder
[*.cs]
dotnet_diagnostic.CA2007.severity = none # Do not directly await a Task
dotnet_diagnostic.VSTHRD111.severity = none # Use .ConfigureAwait(bool) is hidden by default, set to none to prevent IDE from changing on autosave
dotnet_diagnostic.CS1591.severity = none # Missing XML comment for publicly visible type or member
dotnet_diagnostic.IDE1006.severity = warning # Naming rule violations

resharper_convert_constructor_to_member_initializers_highlighting = false # Disable highlighting for "Convert constructor to member initializers" quick-fix
Loading
Loading