diff --git a/Directory.Packages.props b/Directory.Packages.props
index 1428d2bb332..9e283fcd84a 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -13,7 +13,7 @@
vulnerability in the NuGet packages that are published from this repository.
-->
-
+
@@ -41,9 +41,6 @@
-->
-
-
-
diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md
index c6f246d2d7d..f0f9461eff6 100644
--- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md
+++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md
@@ -2,6 +2,12 @@
## Unreleased
+* Bumped the version of `Google.Protobuf` used by the project to `3.22.5` so
+ that consuming applications can be published as NativeAOT successfully. Also,
+ a new performance feature can be used instead of reflection emit, which is
+ not AOT-compatible. Removed the dependency on `System.Reflection.Emit.Lightweight`.
+ ([#4859](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4859))
+
## 1.6.0
Released 2023-Sep-05
diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ActivityExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ActivityExtensions.cs
index b4b2d2f4204..e967cef97e6 100644
--- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ActivityExtensions.cs
+++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ActivityExtensions.cs
@@ -16,11 +16,8 @@
using System.Collections.Concurrent;
using System.Diagnostics;
-using System.Reflection;
-using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using Google.Protobuf;
-using Google.Protobuf.Collections;
using OpenTelemetry.Internal;
using OpenTelemetry.Proto.Collector.Trace.V1;
using OpenTelemetry.Proto.Common.V1;
@@ -34,7 +31,6 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation;
internal static class ActivityExtensions
{
private static readonly ConcurrentBag SpanListPool = new();
- private static readonly Action, int> RepeatedFieldOfSpanSetCountAction = CreateRepeatedFieldOfSpanSetCountAction();
internal static void AddBatch(
this ExportTraceServiceRequest request,
@@ -84,7 +80,7 @@ internal static void Return(this ExportTraceServiceRequest request)
foreach (var scope in resourceSpans.ScopeSpans)
{
- RepeatedFieldOfSpanSetCountAction(scope.Spans, 0);
+ scope.Spans.Clear();
SpanListPool.Add(scope);
}
}
@@ -298,27 +294,6 @@ private static Span.Types.Event ToOtlpEvent(in ActivityEvent activityEvent, SdkL
return otlpEvent;
}
- private static Action, int> CreateRepeatedFieldOfSpanSetCountAction()
- {
- FieldInfo repeatedFieldOfSpanCountField = typeof(RepeatedField).GetField("count", BindingFlags.NonPublic | BindingFlags.Instance);
-
- DynamicMethod dynamicMethod = new DynamicMethod(
- "CreateSetCountAction",
- null,
- new[] { typeof(RepeatedField), typeof(int) },
- typeof(ActivityExtensions).Module,
- skipVisibility: true);
-
- var generator = dynamicMethod.GetILGenerator();
-
- generator.Emit(OpCodes.Ldarg_0);
- generator.Emit(OpCodes.Ldarg_1);
- generator.Emit(OpCodes.Stfld, repeatedFieldOfSpanCountField);
- generator.Emit(OpCodes.Ret);
-
- return (Action, int>)dynamicMethod.CreateDelegate(typeof(Action, int>));
- }
-
private struct TagEnumerationState : PeerServiceResolver.IPeerServiceState
{
public SdkLimitOptions SdkLimitOptions;
diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/MetricItemExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/MetricItemExtensions.cs
index 3f7cd218d42..9c20d38cb78 100644
--- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/MetricItemExtensions.cs
+++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/MetricItemExtensions.cs
@@ -15,8 +15,6 @@
//
using System.Collections.Concurrent;
-using System.Reflection;
-using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using Google.Protobuf;
using Google.Protobuf.Collections;
@@ -31,7 +29,6 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation;
internal static class MetricItemExtensions
{
private static readonly ConcurrentBag MetricListPool = new();
- private static readonly Action, int> RepeatedFieldOfMetricSetCountAction = CreateRepeatedFieldOfMetricSetCountAction();
internal static void AddMetrics(
this OtlpCollector.ExportMetricsServiceRequest request,
@@ -82,7 +79,7 @@ internal static void Return(this OtlpCollector.ExportMetricsServiceRequest reque
foreach (var scope in resourceMetrics.ScopeMetrics)
{
- RepeatedFieldOfMetricSetCountAction(scope.Metrics, 0);
+ scope.Metrics.Clear();
MetricListPool.Add(scope);
}
}
@@ -418,25 +415,4 @@ private static OtlpMetrics.Exemplar ToOtlpExemplar(this IExemplar exemplar)
return otlpExemplar;
}
*/
-
- private static Action, int> CreateRepeatedFieldOfMetricSetCountAction()
- {
- FieldInfo repeatedFieldOfMetricCountField = typeof(RepeatedField).GetField("count", BindingFlags.NonPublic | BindingFlags.Instance);
-
- DynamicMethod dynamicMethod = new DynamicMethod(
- "CreateSetCountAction",
- null,
- new[] { typeof(RepeatedField), typeof(int) },
- typeof(MetricItemExtensions).Module,
- skipVisibility: true);
-
- var generator = dynamicMethod.GetILGenerator();
-
- generator.Emit(OpCodes.Ldarg_0);
- generator.Emit(OpCodes.Ldarg_1);
- generator.Emit(OpCodes.Stfld, repeatedFieldOfMetricCountField);
- generator.Emit(OpCodes.Ret);
-
- return (Action, int>)dynamicMethod.CreateDelegate(typeof(Action, int>));
- }
}
diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj
index ba0bde3424b..ecd759f4ea6 100644
--- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj
+++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj
@@ -19,7 +19,6 @@
-
diff --git a/test/OpenTelemetry.AotCompatibility.TestApp/OpenTelemetry.AotCompatibility.TestApp.csproj b/test/OpenTelemetry.AotCompatibility.TestApp/OpenTelemetry.AotCompatibility.TestApp.csproj
index 3a2e891f913..4d82290d9a1 100644
--- a/test/OpenTelemetry.AotCompatibility.TestApp/OpenTelemetry.AotCompatibility.TestApp.csproj
+++ b/test/OpenTelemetry.AotCompatibility.TestApp/OpenTelemetry.AotCompatibility.TestApp.csproj
@@ -17,6 +17,7 @@
+