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

Add .NET client for dynamic pubsub subscriptions #1346

Closed
wants to merge 46 commits into from
Closed
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
86a6c1c
First pass implementing standalone pubsub client for Dapr (focusing o…
WhitWaldo Sep 4, 2024
849a828
Added missing copyright notice
WhitWaldo Sep 4, 2024
2d73e69
Fleshing out comments
WhitWaldo Sep 4, 2024
bed6e4d
Added Dapr.Protos project to solution as a central place to put the D…
WhitWaldo Sep 4, 2024
bdc5a03
Added Nuget properties to project
WhitWaldo Sep 4, 2024
1f43315
Restored missing using
WhitWaldo Sep 4, 2024
0bab52c
Updated to use the standard Dapr client builder, added DI registratio…
WhitWaldo Sep 4, 2024
90fe7b0
Minor tweaks to conform to solution style
WhitWaldo Sep 4, 2024
5e751db
Merge branch 'master' into stream-sub
WhitWaldo Sep 4, 2024
6d5ed77
Tweak to README to include additional package names
WhitWaldo Sep 4, 2024
32ce9be
Added test project for Dapr.Messaging
WhitWaldo Sep 4, 2024
0852650
Added missing copyright statement
WhitWaldo Sep 15, 2024
0cb3815
Updated naming in file to match solution convention. Fleshed out miss…
WhitWaldo Sep 15, 2024
7edb9c5
Conforming to naming conventions
WhitWaldo Sep 15, 2024
e3491b4
Merge branch 'master' into stream-sub
WhitWaldo Sep 15, 2024
219d458
Eliminated need for locks by using ConcurrentDictionary instead
WhitWaldo Sep 15, 2024
1847ca9
Simplified registration extensions to minimize repeated implementations
WhitWaldo Sep 15, 2024
848c490
Added public key to InternalsVisibleTo annotation
WhitWaldo Sep 16, 2024
b6810b0
Significantly simplified dynamic pubsub implementation
WhitWaldo Sep 16, 2024
04fa4d5
Handling cancellation token timeout with configured action
WhitWaldo Sep 16, 2024
d165b14
Updated name of method so it wouldn't be as confusing why the develop…
WhitWaldo Sep 16, 2024
5c3e1ce
Added another message handler to facilitate channel draining in case …
WhitWaldo Sep 16, 2024
85ef0f8
Handling potential race condition, corrected return type to be Publis…
WhitWaldo Sep 16, 2024
218f604
No longer limiting a single subscriber for each component/topic combi…
WhitWaldo Sep 16, 2024
a7c4d5d
Eliminated restriction for one subscription per component/topic. Adde…
WhitWaldo Sep 16, 2024
152c14e
Updated to latest protos
WhitWaldo Sep 16, 2024
3af961a
Updates to implementation to reflect latest protos
WhitWaldo Sep 16, 2024
6e17cd3
Removed unused method
WhitWaldo Sep 16, 2024
562298b
Removed unused usings
WhitWaldo Sep 16, 2024
448c89b
Added the only unit test I could identify that is within capabilities…
WhitWaldo Sep 16, 2024
e18e49c
Fixing accessibility problem
WhitWaldo Sep 16, 2024
033a27a
Added example demonstrating the streaming subscription functionality
WhitWaldo Sep 16, 2024
d8969d0
Retargeting to .NET 6 instead of .NET 8
WhitWaldo Sep 16, 2024
a9f645c
Added sample deserialization - could be improved with client support
WhitWaldo Sep 16, 2024
d0efaed
Removed singleton ConnectionManager as non-conforming to the spec. Ad…
WhitWaldo Sep 25, 2024
dd22e83
Added default cancellation token value
WhitWaldo Sep 25, 2024
521396f
Minor refactoring so cancellation exceptions can be handled in a sing…
WhitWaldo Sep 25, 2024
ef418c0
Refactoring to ensure that channels are drained successfully even if …
WhitWaldo Sep 25, 2024
3addf75
Cleaning up unnecessary iniitalization values, usings and null access…
WhitWaldo Sep 25, 2024
1cb6855
Modified message drain to only drain acknowledgements and even then, …
WhitWaldo Sep 25, 2024
462e9a1
Updated to eliminate the double call for 'Register.SubscribeAsync' as…
WhitWaldo Sep 25, 2024
f16effc
Removed unnecessary call to DisposeAsync
WhitWaldo Sep 25, 2024
67a637b
Updated to apply some performance improvements to the channels at ins…
WhitWaldo Sep 25, 2024
a67185d
Added cancellation token to acknowledgement channel writer
WhitWaldo Sep 26, 2024
ce5b24a
Merge branch 'master' into stream-sub
WhitWaldo Oct 14, 2024
6db55c4
Merge branch 'master' into stream-sub
WhitWaldo Oct 15, 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
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,10 @@ This repo builds the following packages:
- Dapr.AspNetCore
- Dapr.Actors
- Dapr.Actors.AspNetCore
- Dapr.Common
- Dapr.Extensions.Configuration
- Dapr.Messaging
- Dapr.Protos
- Dapr.Workflow

### Prerequisites
Expand Down
28 changes: 28 additions & 0 deletions all.sln
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dapr.E2E.Test.Actors.Genera
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cryptography", "examples\Client\Cryptography\Cryptography.csproj", "{C74FBA78-13E8-407F-A173-4555AEE41FF3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dapr.Messaging", "src\Dapr.Messaging\Dapr.Messaging.csproj", "{250F0236-2014-4DD8-A688-CD25EE299FA3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dapr.Protos", "src\Dapr.Protos\Dapr.Protos.csproj", "{CE506C30-5701-47C9-A86E-39D796B8DF35}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dapr.Common", "src\Dapr.Common\Dapr.Common.csproj", "{9AB7EB9D-82CB-4BC6-B895-4F52F8DC489F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dapr.Messaging.Test", "test\Dapr.Messaging.Test\Dapr.Messaging.Test.csproj", "{93C6ABAF-F4B7-4CA2-8734-565EF847668A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -290,6 +298,22 @@ Global
{C74FBA78-13E8-407F-A173-4555AEE41FF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C74FBA78-13E8-407F-A173-4555AEE41FF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C74FBA78-13E8-407F-A173-4555AEE41FF3}.Release|Any CPU.Build.0 = Release|Any CPU
{250F0236-2014-4DD8-A688-CD25EE299FA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{250F0236-2014-4DD8-A688-CD25EE299FA3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{250F0236-2014-4DD8-A688-CD25EE299FA3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{250F0236-2014-4DD8-A688-CD25EE299FA3}.Release|Any CPU.Build.0 = Release|Any CPU
{CE506C30-5701-47C9-A86E-39D796B8DF35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CE506C30-5701-47C9-A86E-39D796B8DF35}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CE506C30-5701-47C9-A86E-39D796B8DF35}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CE506C30-5701-47C9-A86E-39D796B8DF35}.Release|Any CPU.Build.0 = Release|Any CPU
{9AB7EB9D-82CB-4BC6-B895-4F52F8DC489F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9AB7EB9D-82CB-4BC6-B895-4F52F8DC489F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9AB7EB9D-82CB-4BC6-B895-4F52F8DC489F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9AB7EB9D-82CB-4BC6-B895-4F52F8DC489F}.Release|Any CPU.Build.0 = Release|Any CPU
{93C6ABAF-F4B7-4CA2-8734-565EF847668A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{93C6ABAF-F4B7-4CA2-8734-565EF847668A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{93C6ABAF-F4B7-4CA2-8734-565EF847668A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{93C6ABAF-F4B7-4CA2-8734-565EF847668A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -343,6 +367,10 @@ Global
{AF89083D-4715-42E6-93E9-38497D12A8A6} = {DD020B34-460F-455F-8D17-CF4A949F100B}
{B5CDB0DC-B26D-48F1-B934-FE5C1C991940} = {DD020B34-460F-455F-8D17-CF4A949F100B}
{C74FBA78-13E8-407F-A173-4555AEE41FF3} = {A7F41094-8648-446B-AECD-DCC2CC871F73}
{250F0236-2014-4DD8-A688-CD25EE299FA3} = {27C5D71D-0721-4221-9286-B94AB07B58CF}
{CE506C30-5701-47C9-A86E-39D796B8DF35} = {27C5D71D-0721-4221-9286-B94AB07B58CF}
{9AB7EB9D-82CB-4BC6-B895-4F52F8DC489F} = {27C5D71D-0721-4221-9286-B94AB07B58CF}
{93C6ABAF-F4B7-4CA2-8734-565EF847668A} = {DD020B34-460F-455F-8D17-CF4A949F100B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {65220BF2-EAE1-4CB2-AA58-EBE80768CB40}
Expand Down
2 changes: 1 addition & 1 deletion properties/IsExternalInit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ namespace System.Runtime.CompilerServices
internal static class IsExternalInit
{
}

}
18 changes: 18 additions & 0 deletions src/Dapr.Common/Dapr.Common.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<Compile Include="..\Shared\DaprDefaults.cs" />
<Compile Include="..\Shared\ArgumentVerifier.cs" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Grpc.Net.Client" Version="2.52.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="3.1.32" />
</ItemGroup>

</Project>
55 changes: 55 additions & 0 deletions src/Dapr.Common/DaprException.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// ------------------------------------------------------------------------
// Copyright 2024 The Dapr Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ------------------------------------------------------------------------

using System.Runtime.Serialization;

namespace Dapr
{
/// <summary>
/// The base type of exceptions thrown by the Dapr .NET SDK.
/// </summary>
[Serializable]
public class DaprException : Exception
{
/// <summary>
/// Initializes a new instance of <see cref="DaprException" /> with the provided <paramref name="message" />.
/// </summary>
/// <param name="message">The exception message.</param>
public DaprException(string message)
: base(message)
{
}
/// <summary>
/// Initializes a new instance of <see cref="DaprException" /> with the provided
/// <paramref name="message" /> and <paramref name="innerException" />.
/// </summary>
/// <param name="message">The exception message.</param>
/// <param name="innerException">The inner exception.</param>
public DaprException(string message, Exception innerException)
: base(message, innerException)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="DaprException"/> class with a specified context.
/// </summary>
/// <param name="info">The <see cref="SerializationInfo" /> object that contains serialized object data of the exception being thrown.</param>
/// <param name="context">The <see cref="StreamingContext" /> object that contains contextual information about the source or destination. The context parameter is reserved for future use and can be null.</param>
#if NET8_0_OR_GREATER
[Obsolete(DiagnosticId = "SYSLIB0051")] // add this attribute to GetObjectData
#endif
protected DaprException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}
}
226 changes: 226 additions & 0 deletions src/Dapr.Common/DaprGenericClientBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
// ------------------------------------------------------------------------
// Copyright 2024 The Dapr Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ------------------------------------------------------------------------

namespace Dapr.Common;

using System;
using System.Net.Http;
using System.Text.Json;
using Grpc.Net.Client;

/// <summary>
/// Builder for building a generic Dapr client.
/// </summary>
public abstract class DaprGenericClientBuilder<TClientBuilder> where TClientBuilder : class
{
/// <summary>
/// Initializes a new instance of the <see cref="DaprGenericClientBuilder{TClientBuilder}"/> class.
/// </summary>
protected DaprGenericClientBuilder()
{
this.GrpcEndpoint = DaprDefaults.GetDefaultGrpcEndpoint();
this.HttpEndpoint = DaprDefaults.GetDefaultHttpEndpoint();

this.GrpcChannelOptions = new GrpcChannelOptions()
{
// The gRPC client doesn't throw the right exception for cancellation
// by default, this switches that behavior on.
ThrowOperationCanceledOnCancellation = true,
};

this.JsonSerializerOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web);
this.DaprApiToken = DaprDefaults.GetDefaultDaprApiToken();
}

/// <summary>
/// Property exposed for testing purposes.
/// </summary>
public string GrpcEndpoint { get; private set; }

/// <summary>
/// Property exposed for testing purposes.
/// </summary>
public string HttpEndpoint { get; private set; }

/// <summary>
/// Property exposed for testing purposes.
/// </summary>
public Func<HttpClient>? HttpClientFactory { get; set; }

/// <summary>
/// Property exposed for testing purposes.
/// </summary>
public JsonSerializerOptions JsonSerializerOptions { get; private set; }

/// <summary>
/// Property exposed for testing purposes.
/// </summary>
public GrpcChannelOptions GrpcChannelOptions { get; private set; }

/// <summary>
/// Property exposed for testing purposes.
/// </summary>
public string DaprApiToken { get; private set; }
/// <summary>
/// Property exposed for testing purposes.
/// </summary>
public TimeSpan Timeout { get; private set; }

/// <summary>
/// Overrides the HTTP endpoint used by the Dapr client for communicating with the Dapr runtime.
/// </summary>
/// <param name="httpEndpoint">
/// The URI endpoint to use for HTTP calls to the Dapr runtime. The default value will be
/// <c>DAPR_HTTP_ENDPOINT</c> first, or <c>http://127.0.0.1:DAPR_HTTP_PORT</c> as fallback
/// where <c>DAPR_HTTP_ENDPOINT</c> and <c>DAPR_HTTP_PORT</c> represents the value of the
/// corresponding environment variables.
/// </param>
/// <returns>The <see cref="DaprGenericClientBuilder{TClientBuilder}" /> instance.</returns>
public DaprGenericClientBuilder<TClientBuilder> UseHttpEndpoint(string httpEndpoint)
{
ArgumentVerifier.ThrowIfNullOrEmpty(httpEndpoint, nameof(httpEndpoint));
this.HttpEndpoint = httpEndpoint;
return this;
}

/// <summary>
/// Exposed internally for testing purposes.
/// </summary>
internal DaprGenericClientBuilder<TClientBuilder> UseHttpClientFactory(Func<HttpClient> factory)
{
this.HttpClientFactory = factory;
return this;
}

/// <summary>
/// Overrides the legacy mechanism for building an HttpClient and uses the new <see cref="IHttpClientFactory"/>
/// introduced in .NET Core 2.1.
/// </summary>
/// <param name="httpClientFactory">The factory used to create <see cref="HttpClient"/> instances.</param>
/// <returns></returns>
public DaprGenericClientBuilder<TClientBuilder> UseHttpClientFactory(IHttpClientFactory httpClientFactory)
{
this.HttpClientFactory = httpClientFactory.CreateClient;
return this;
}

/// <summary>
/// Overrides the gRPC endpoint used by the Dapr client for communicating with the Dapr runtime.
/// </summary>
/// <param name="grpcEndpoint">
/// The URI endpoint to use for gRPC calls to the Dapr runtime. The default value will be
/// <c>http://127.0.0.1:DAPR_GRPC_PORT</c> where <c>DAPR_GRPC_PORT</c> represents the value of the
/// <c>DAPR_GRPC_PORT</c> environment variable.
/// </param>
/// <returns>The <see cref="DaprGenericClientBuilder{TClientBuilder}" /> instance.</returns>
public DaprGenericClientBuilder<TClientBuilder> UseGrpcEndpoint(string grpcEndpoint)
{
ArgumentVerifier.ThrowIfNullOrEmpty(grpcEndpoint, nameof(grpcEndpoint));
this.GrpcEndpoint = grpcEndpoint;
return this;
}

/// <summary>
/// <para>
/// Uses the specified <see cref="JsonSerializerOptions"/> when serializing or deserializing using <see cref="System.Text.Json"/>.
/// </para>
/// <para>
/// The default value is created using <see cref="JsonSerializerDefaults.Web" />.
/// </para>
/// </summary>
/// <param name="options">Json serialization options.</param>
/// <returns>The <see cref="DaprGenericClientBuilder{TClientBuilder}" /> instance.</returns>
public DaprGenericClientBuilder<TClientBuilder> UseJsonSerializationOptions(JsonSerializerOptions options)
{
this.JsonSerializerOptions = options;
return this;
}

/// <summary>
/// Uses the provided <paramref name="grpcChannelOptions" /> for creating the <see cref="GrpcChannel" />.
/// </summary>
/// <param name="grpcChannelOptions">The <see cref="GrpcChannelOptions" /> to use for creating the <see cref="GrpcChannel" />.</param>
/// <returns>The <see cref="DaprGenericClientBuilder{TClientBuilder}" /> instance.</returns>
public DaprGenericClientBuilder<TClientBuilder> UseGrpcChannelOptions(GrpcChannelOptions grpcChannelOptions)
{
this.GrpcChannelOptions = grpcChannelOptions;
return this;
}

/// <summary>
/// Adds the provided <paramref name="apiToken" /> on every request to the Dapr runtime.
/// </summary>
/// <param name="apiToken">The token to be added to the request headers/>.</param>
/// <returns>The <see cref="DaprGenericClientBuilder{TClientBuilder}" /> instance.</returns>
public DaprGenericClientBuilder<TClientBuilder> UseDaprApiToken(string apiToken)
{
this.DaprApiToken = apiToken;
return this;
}

/// <summary>
/// Sets the timeout for the HTTP client used by the Dapr client.
/// </summary>
/// <param name="timeout"></param>
/// <returns></returns>
public DaprGenericClientBuilder<TClientBuilder> UseTimeout(TimeSpan timeout)
{
this.Timeout = timeout;
return this;
}

/// <summary>
/// Builds out the inner DaprClient that provides the core shape of the
/// runtime gRPC client used by the consuming package.
/// </summary>
/// <exception cref="InvalidOperationException"></exception>
protected (GrpcChannel channel, HttpClient httpClient, Uri httpEndpoint) BuildDaprClientDependencies()
{
var grpcEndpoint = new Uri(this.GrpcEndpoint);
if (grpcEndpoint.Scheme != "http" && grpcEndpoint.Scheme != "https")
{
throw new InvalidOperationException("The gRPC endpoint must use http or https.");
}

if (grpcEndpoint.Scheme.Equals(Uri.UriSchemeHttp))
{
// Set correct switch to make secure gRPC service calls. This switch must be set before creating the GrpcChannel.
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
}

var httpEndpoint = new Uri(this.HttpEndpoint);
if (httpEndpoint.Scheme != "http" && httpEndpoint.Scheme != "https")
{
throw new InvalidOperationException("The HTTP endpoint must use http or https.");
}

var channel = GrpcChannel.ForAddress(this.GrpcEndpoint, this.GrpcChannelOptions);

var httpClient = HttpClientFactory is not null ? HttpClientFactory() : new HttpClient();
if (this.Timeout > TimeSpan.Zero)
{
httpClient.Timeout = this.Timeout;
}

return (channel, httpClient, httpEndpoint);
}

/// <summary>
/// Builds the client instance from the properties of the builder.
/// </summary>
/// <returns>The Dapr client instance.</returns>
/// <summary>
/// Builds the client instance from the properties of the builder.
/// </summary>
public abstract TClientBuilder Build();
}
3 changes: 3 additions & 0 deletions src/Dapr.Messaging/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("Dapr.Messaging.Test")]

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Test .NET 6.0

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Test .NET 6.0

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Test .NET 6.0

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Test .NET 6.0

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / run integration tests (6.0)

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / run integration tests (6.0)

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / run integration tests (6.0)

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / run integration tests (6.0)

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / run integration tests (7.0)

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / run integration tests (7.0)

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / run integration tests (7.0)

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / run integration tests (7.0)

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Build

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Build

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Build

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Build

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Test .NET 7.0

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Test .NET 7.0

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Test .NET 7.0

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Test .NET 7.0

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / run integration tests (8.0)

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / run integration tests (8.0)

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / run integration tests (8.0)

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / run integration tests (8.0)

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Test .NET 8.0

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Test .NET 8.0

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Test .NET 8.0

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

Check failure on line 3 in src/Dapr.Messaging/AssemblyInfo.cs

View workflow job for this annotation

GitHub Actions / Test .NET 8.0

Friend assembly reference 'Dapr.Messaging.Test' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.
21 changes: 21 additions & 0 deletions src/Dapr.Messaging/Dapr.Messaging.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<Description>This package contains the reference assemblies for developing messaging services using Dapr.</Description>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<PackageId>Dapr.Messaging</PackageId>
<Title>Dapr Messaging SDK</Title>
<Description>Dapr Messaging SDK for building applications that utilize messaging components.</Description>
<VersionSuffix>alpha</VersionSuffix>
WhitWaldo marked this conversation as resolved.
Show resolved Hide resolved
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Dapr.Common\Dapr.Common.csproj" />
<ProjectReference Include="..\Dapr.Protos\Dapr.Protos.csproj" />
</ItemGroup>
</Project>
Loading
Loading