Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
3f30049
Add characterization tests for message metadata and serializer behavior
danielmarbach Aug 28, 2026
8dca777
Add cache-only message metadata lookup and reflection-free logical me…
danielmarbach Aug 28, 2026
80c3db9
Add AddMessageType with interceptor and trimming-safe registration
danielmarbach Aug 28, 2026
fa2a832
Add executable scanner-disabled trimmed endpoint validation and fix p…
danielmarbach Aug 28, 2026
cd2db0b
Pass generated correlation accessor to SagaMapper, emit finder-only s…
danielmarbach Aug 28, 2026
c55ef09
Key generated saga correlation accessors by saga-data type and exerci…
danielmarbach Aug 28, 2026
0135700
Share message hierarchy ordering between handler and AddMessageType g…
danielmarbach Aug 28, 2026
02b6eb2
Fix saga trim annotations and exercise saga scenarios in the trimmed …
danielmarbach Aug 28, 2026
2fc4d21
Verify build-transitive package consumption of trimming-safe registra…
danielmarbach Aug 28, 2026
54f5950
Add executable NativeAOT validation for scanner-disabled endpoint
danielmarbach Aug 28, 2026
b1a6d40
Activate strict registered-only message metadata mode for disabled sc…
danielmarbach Aug 28, 2026
be94de7
Assert strict registered-only metadata mode in the trimmed endpoint s…
danielmarbach Aug 28, 2026
257c9a3
Verify EnableTrimAnalyzer generates interceptors without activating s…
danielmarbach Aug 28, 2026
f96b23a
Verify PublishAot alone emits the runtime strict-mode signal
danielmarbach Aug 28, 2026
630dcdc
Cleanup trimming program
danielmarbach Aug 28, 2026
284c20f
Modernize slightly
danielmarbach Aug 28, 2026
0d02bd4
Remove attribute approach and replace with target
danielmarbach Aug 28, 2026
e29abc5
Reuse existing configs
danielmarbach Aug 28, 2026
4cb1896
Remove overly excessive test because it is too internals focused
danielmarbach Aug 28, 2026
a0d8d4e
Remove Directory.Build.props changes
bording Aug 28, 2026
f857918
Tweaks to TrimmedEndpoint naming / location
bording Aug 28, 2026
7b6d732
Import the files instead
bording Aug 28, 2026
bbf4f71
Rename target
bording Aug 28, 2026
1e17c8e
Clean up usings
bording Aug 28, 2026
be1ced4
Formatting
bording Aug 28, 2026
1b229cc
Clarify conventions
danielmarbach Sep 1, 2026
5c980b9
Extend trimming tests
danielmarbach Sep 1, 2026
127939a
Restoring the trimming warnings from before
danielmarbach Sep 2, 2026
484c029
Refactor strict missing metadata exception handling
danielmarbach Sep 2, 2026
8452adc
Wording suggestion
danielmarbach Sep 2, 2026
c56aeda
Add nullable reference type support to GetType method
danielmarbach Sep 2, 2026
65be938
Improve message
danielmarbach Sep 2, 2026
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// == NServiceBus.Core.Analyzer/NServiceBus.Core.Analyzer.Messages.AddMessageTypeInterceptor/InterceptionsOfAddMessageTypeMethod.g.cs ==
// <auto-generated/>

#nullable enable annotations
#nullable disable warnings

// Suppress warnings about [Obsolete] member usage in generated code.
#pragma warning disable CS0612, CS0618

namespace System.Runtime.CompilerServices
{
[global::System.Diagnostics.Conditional("DEBUG")]
[global::System.AttributeUsage(global::System.AttributeTargets.Method, AllowMultiple = true)]
sealed file class InterceptsLocationAttribute : global::System.Attribute
{
public InterceptsLocationAttribute(int version, string data)
{
_ = version;
_ = data;
}
}
}

namespace NServiceBus
{
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
static file class InterceptionsOfAddMessageTypeMethod
{
extension (NServiceBus.EndpointConfiguration endpointConfiguration)
{
[global::System.Runtime.CompilerServices.InterceptsLocationAttribute(1, "{PLATFORM-SPECIFIC-BASE64-DATA}")] // test.cs(8,13)
[global::System.Runtime.CompilerServices.InterceptsLocationAttribute(1, "{PLATFORM-SPECIFIC-BASE64-DATA}")] // test.cs(10,13)
public void AddMessageType_OrderBilled_baccb8cecdf46c5c()
{
System.ArgumentNullException.ThrowIfNull(endpointConfiguration);
var settings = NServiceBus.Configuration.AdvancedExtensibility.AdvancedExtensibilityExtensions.GetSettings(endpointConfiguration);
var messageMetadataRegistry = settings.GetOrCreate<NServiceBus.Unicast.Messages.MessageMetadataRegistry>();
messageMetadataRegistry.RegisterMessageTypeWithHierarchy(typeof(global::Messages.OrderBilled), []);
}

[global::System.Runtime.CompilerServices.InterceptsLocationAttribute(1, "{PLATFORM-SPECIFIC-BASE64-DATA}")] // test.cs(7,13)
public void AddMessageType_OrderPlaced_957130e0bad70f6d()
{
System.ArgumentNullException.ThrowIfNull(endpointConfiguration);
var settings = NServiceBus.Configuration.AdvancedExtensibility.AdvancedExtensibilityExtensions.GetSettings(endpointConfiguration);
var messageMetadataRegistry = settings.GetOrCreate<NServiceBus.Unicast.Messages.MessageMetadataRegistry>();
messageMetadataRegistry.RegisterMessageTypeWithHierarchy(typeof(global::Messages.OrderPlaced), []);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
// == NServiceBus.Core.Analyzer/NServiceBus.Core.Analyzer.Messages.AddMessageTypeInterceptor/InterceptionsOfAddMessageTypeMethod.g.cs ==
// <auto-generated/>

#nullable enable annotations
#nullable disable warnings

// Suppress warnings about [Obsolete] member usage in generated code.
#pragma warning disable CS0612, CS0618

namespace System.Runtime.CompilerServices
{
[global::System.Diagnostics.Conditional("DEBUG")]
[global::System.AttributeUsage(global::System.AttributeTargets.Method, AllowMultiple = true)]
sealed file class InterceptsLocationAttribute : global::System.Attribute
{
public InterceptsLocationAttribute(int version, string data)
{
_ = version;
_ = data;
}
}
}

namespace NServiceBus
{
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
static file class InterceptionsOfAddMessageTypeMethod
{
extension (NServiceBus.EndpointConfiguration endpointConfiguration)
{
[global::System.Runtime.CompilerServices.InterceptsLocationAttribute(1, "{PLATFORM-SPECIFIC-BASE64-DATA}")] // test.cs(7,13)
public void AddMessageType_OrderAccepted_f4c4dd469ffffa61()
{
System.ArgumentNullException.ThrowIfNull(endpointConfiguration);
var settings = NServiceBus.Configuration.AdvancedExtensibility.AdvancedExtensibilityExtensions.GetSettings(endpointConfiguration);
var messageMetadataRegistry = settings.GetOrCreate<NServiceBus.Unicast.Messages.MessageMetadataRegistry>();
messageMetadataRegistry.RegisterMessageTypeWithHierarchy(typeof(global::Messages.OrderAccepted),
[
typeof(global::Messages.ISecond),
typeof(global::Messages.IFirst),
typeof(global::Messages.OrderEventBase),
]);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// == NServiceBus.Core.Analyzer/NServiceBus.Core.Analyzer.Messages.AddMessageTypeInterceptor/InterceptionsOfAddMessageTypeMethod.g.cs ==
// <auto-generated/>

#nullable enable annotations
#nullable disable warnings

// Suppress warnings about [Obsolete] member usage in generated code.
#pragma warning disable CS0612, CS0618

namespace System.Runtime.CompilerServices
{
[global::System.Diagnostics.Conditional("DEBUG")]
[global::System.AttributeUsage(global::System.AttributeTargets.Method, AllowMultiple = true)]
sealed file class InterceptsLocationAttribute : global::System.Attribute
{
public InterceptsLocationAttribute(int version, string data)
{
_ = version;
_ = data;
}
}
}

namespace NServiceBus
{
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
static file class InterceptionsOfAddMessageTypeMethod
{
extension (NServiceBus.EndpointConfiguration endpointConfiguration)
{
[global::System.Runtime.CompilerServices.InterceptsLocationAttribute(1, "{PLATFORM-SPECIFIC-BASE64-DATA}")] // test.cs(7,13)
public void AddMessageType_OrderAccepted_f4c4dd469ffffa61()
{
System.ArgumentNullException.ThrowIfNull(endpointConfiguration);
var settings = NServiceBus.Configuration.AdvancedExtensibility.AdvancedExtensibilityExtensions.GetSettings(endpointConfiguration);
var messageMetadataRegistry = settings.GetOrCreate<NServiceBus.Unicast.Messages.MessageMetadataRegistry>();
messageMetadataRegistry.RegisterMessageTypeWithHierarchy(typeof(global::Messages.OrderAccepted),
[
typeof(global::Messages.IOrderEvent),
typeof(global::Messages.OrderEventBase),
]);
}

[global::System.Runtime.CompilerServices.InterceptsLocationAttribute(1, "{PLATFORM-SPECIFIC-BASE64-DATA}")] // test.cs(8,13)
public void AddMessageType_OrderRejected_6d51746e2bdec64a()
{
System.ArgumentNullException.ThrowIfNull(endpointConfiguration);
var settings = NServiceBus.Configuration.AdvancedExtensibility.AdvancedExtensibilityExtensions.GetSettings(endpointConfiguration);
var messageMetadataRegistry = settings.GetOrCreate<NServiceBus.Unicast.Messages.MessageMetadataRegistry>();
messageMetadataRegistry.RegisterMessageTypeWithHierarchy(typeof(global::Messages.OrderRejected),
[
typeof(global::Messages.OrderEventBase),
]);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ namespace NServiceBus
OrderBilledOrderIdAccessor_f7dc3394c771851e.Instance,
OrderPlacedOrderIdAccessor_ae6ad694572b9fcb.Instance,
];
var metadata = NServiceBus.Sagas.SagaMetadata.Create<global::Orders.Billing.OrderBillingPolicy, global::Orders.Billing.OrderBillingPolicyData>(associatedMessages, OrderIdAsStringAccessor_4a76700cf8410b3a.Instance, propertyAccessors);
var metadata = NServiceBus.Sagas.SagaMetadata.Create<global::Orders.Billing.OrderBillingPolicy, global::Orders.Billing.OrderBillingPolicyData>(associatedMessages, OrderIdAsStringAccessor_5b84242b5a03d625.Instance, propertyAccessors);
sagaMetadataCollection.Add(metadata);

var settings = NServiceBus.Configuration.AdvancedExtensibility.AdvancedExtensibilityExtensions.GetSettings(_configuration);
Expand Down Expand Up @@ -77,7 +77,7 @@ namespace NServiceBus
OrderBilledOrderIdAccessor_08b7b00354e1d041.Instance,
OrderPlacedOrderIdAccessor_13dea9c2dc628538.Instance,
];
var metadata = NServiceBus.Sagas.SagaMetadata.Create<global::Orders.Shipping.OrderShippingPolicy, global::Orders.Shipping.OrderShippingPolicyData>(associatedMessages, OrderIdAsStringAccessor_4a76700cf8410b3a.Instance, propertyAccessors);
var metadata = NServiceBus.Sagas.SagaMetadata.Create<global::Orders.Shipping.OrderShippingPolicy, global::Orders.Shipping.OrderShippingPolicyData>(associatedMessages, OrderIdAsStringAccessor_1073497622a938fb.Instance, propertyAccessors);
sagaMetadataCollection.Add(metadata);

var settings = NServiceBus.Configuration.AdvancedExtensibility.AdvancedExtensibilityExtensions.GetSettings(_configuration);
Expand Down Expand Up @@ -115,7 +115,7 @@ namespace NServiceBus
OrderBilledOrderIdAccessor_2fd27f5436ef20b9.Instance,
OrderPlacedOrderIdAccessor_c561311f0fcc5cf0.Instance,
];
var metadata = NServiceBus.Sagas.SagaMetadata.Create<global::Payments.PaymentsPolicy, global::Payments.PaymentsPolicyData>(associatedMessages, OrderIdAsStringAccessor_4a76700cf8410b3a.Instance, propertyAccessors);
var metadata = NServiceBus.Sagas.SagaMetadata.Create<global::Payments.PaymentsPolicy, global::Payments.PaymentsPolicyData>(associatedMessages, OrderIdAsStringAccessor_6d931b1825e0c4ca.Instance, propertyAccessors);
sagaMetadataCollection.Add(metadata);

var settings = NServiceBus.Configuration.AdvancedExtensibility.AdvancedExtensibilityExtensions.GetSettings(_configuration);
Expand Down Expand Up @@ -216,21 +216,59 @@ namespace NServiceBus

[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
file sealed class OrderIdAsStringAccessor_4a76700cf8410b3a : NServiceBus.Sagas.CorrelationPropertyAccessor
file sealed class OrderIdAsStringAccessor_5b84242b5a03d625 : NServiceBus.Sagas.CorrelationPropertyAccessor
{
OrderIdAsStringAccessor_4a76700cf8410b3a() { }
OrderIdAsStringAccessor_5b84242b5a03d625() { }

public override object? AccessFrom(NServiceBus.IContainSagaData sagaData) => AccessFrom_Property(sagaData);
public override object? AccessFrom(NServiceBus.IContainSagaData sagaData) => AccessFrom_Property((global::Orders.Billing.OrderBillingPolicyData)sagaData);

[global::System.Runtime.CompilerServices.UnsafeAccessor(global::System.Runtime.CompilerServices.UnsafeAccessorKind.Method, Name = "get_OrderId")]
static extern string AccessFrom_Property(NServiceBus.IContainSagaData sagaData);
static extern string AccessFrom_Property(global::Orders.Billing.OrderBillingPolicyData sagaData);

public override void WriteTo(NServiceBus.IContainSagaData sagaData, object value) => WriteTo_Property(sagaData, ((string)value));
public override void WriteTo(NServiceBus.IContainSagaData sagaData, object value) => WriteTo_Property((global::Orders.Billing.OrderBillingPolicyData)sagaData, ((string)value));

[global::System.Runtime.CompilerServices.UnsafeAccessor(global::System.Runtime.CompilerServices.UnsafeAccessorKind.Method, Name = "set_OrderId")]
static extern string WriteTo_Property(NServiceBus.IContainSagaData sagaData, string value);
static extern void WriteTo_Property(global::Orders.Billing.OrderBillingPolicyData sagaData, string value);

public static readonly NServiceBus.Sagas.CorrelationPropertyAccessor Instance = new OrderIdAsStringAccessor_4a76700cf8410b3a();
public static readonly NServiceBus.Sagas.CorrelationPropertyAccessor Instance = new OrderIdAsStringAccessor_5b84242b5a03d625();
}

[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
file sealed class OrderIdAsStringAccessor_1073497622a938fb : NServiceBus.Sagas.CorrelationPropertyAccessor
{
OrderIdAsStringAccessor_1073497622a938fb() { }

public override object? AccessFrom(NServiceBus.IContainSagaData sagaData) => AccessFrom_Property((global::Orders.Shipping.OrderShippingPolicyData)sagaData);

[global::System.Runtime.CompilerServices.UnsafeAccessor(global::System.Runtime.CompilerServices.UnsafeAccessorKind.Method, Name = "get_OrderId")]
static extern string AccessFrom_Property(global::Orders.Shipping.OrderShippingPolicyData sagaData);

public override void WriteTo(NServiceBus.IContainSagaData sagaData, object value) => WriteTo_Property((global::Orders.Shipping.OrderShippingPolicyData)sagaData, ((string)value));

[global::System.Runtime.CompilerServices.UnsafeAccessor(global::System.Runtime.CompilerServices.UnsafeAccessorKind.Method, Name = "set_OrderId")]
static extern void WriteTo_Property(global::Orders.Shipping.OrderShippingPolicyData sagaData, string value);

public static readonly NServiceBus.Sagas.CorrelationPropertyAccessor Instance = new OrderIdAsStringAccessor_1073497622a938fb();
}

[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
file sealed class OrderIdAsStringAccessor_6d931b1825e0c4ca : NServiceBus.Sagas.CorrelationPropertyAccessor
{
OrderIdAsStringAccessor_6d931b1825e0c4ca() { }

public override object? AccessFrom(NServiceBus.IContainSagaData sagaData) => AccessFrom_Property((global::Payments.PaymentsPolicyData)sagaData);

[global::System.Runtime.CompilerServices.UnsafeAccessor(global::System.Runtime.CompilerServices.UnsafeAccessorKind.Method, Name = "get_OrderId")]
static extern string AccessFrom_Property(global::Payments.PaymentsPolicyData sagaData);

public override void WriteTo(NServiceBus.IContainSagaData sagaData, object value) => WriteTo_Property((global::Payments.PaymentsPolicyData)sagaData, ((string)value));

[global::System.Runtime.CompilerServices.UnsafeAccessor(global::System.Runtime.CompilerServices.UnsafeAccessorKind.Method, Name = "set_OrderId")]
static extern void WriteTo_Property(global::Payments.PaymentsPolicyData sagaData, string value);

public static readonly NServiceBus.Sagas.CorrelationPropertyAccessor Instance = new OrderIdAsStringAccessor_6d931b1825e0c4ca();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ namespace NServiceBus
NServiceBus.Sagas.MessagePropertyAccessor[] propertyAccessors = [
OrderPlacedOrderIdAccessor_5f69124e5a7de2e1.Instance,
];
var metadata = NServiceBus.Sagas.SagaMetadata.Create<global::OrderShippingPolicy, global::OrderShippingPolicyData>(associatedMessages, OrderIdAsStringAccessor_4a76700cf8410b3a.Instance, propertyAccessors);
var metadata = NServiceBus.Sagas.SagaMetadata.Create<global::OrderShippingPolicy, global::OrderShippingPolicyData>(associatedMessages, OrderIdAsStringAccessor_912ea78b27a6e1ec.Instance, propertyAccessors);
sagaMetadataCollection.Add(metadata);

var settings = NServiceBus.Configuration.AdvancedExtensibility.AdvancedExtensibilityExtensions.GetSettings(_configuration);
Expand Down Expand Up @@ -60,21 +60,21 @@ namespace NServiceBus

[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
file sealed class OrderIdAsStringAccessor_4a76700cf8410b3a : NServiceBus.Sagas.CorrelationPropertyAccessor
file sealed class OrderIdAsStringAccessor_912ea78b27a6e1ec : NServiceBus.Sagas.CorrelationPropertyAccessor
{
OrderIdAsStringAccessor_4a76700cf8410b3a() { }
OrderIdAsStringAccessor_912ea78b27a6e1ec() { }

public override object? AccessFrom(NServiceBus.IContainSagaData sagaData) => AccessFrom_Property(sagaData);
public override object? AccessFrom(NServiceBus.IContainSagaData sagaData) => AccessFrom_Property((global::OrderShippingPolicyData)sagaData);

[global::System.Runtime.CompilerServices.UnsafeAccessor(global::System.Runtime.CompilerServices.UnsafeAccessorKind.Method, Name = "get_OrderId")]
static extern string AccessFrom_Property(NServiceBus.IContainSagaData sagaData);
static extern string AccessFrom_Property(global::OrderShippingPolicyData sagaData);

public override void WriteTo(NServiceBus.IContainSagaData sagaData, object value) => WriteTo_Property(sagaData, ((string)value));
public override void WriteTo(NServiceBus.IContainSagaData sagaData, object value) => WriteTo_Property((global::OrderShippingPolicyData)sagaData, ((string)value));

[global::System.Runtime.CompilerServices.UnsafeAccessor(global::System.Runtime.CompilerServices.UnsafeAccessorKind.Method, Name = "set_OrderId")]
static extern string WriteTo_Property(NServiceBus.IContainSagaData sagaData, string value);
static extern void WriteTo_Property(global::OrderShippingPolicyData sagaData, string value);

public static readonly NServiceBus.Sagas.CorrelationPropertyAccessor Instance = new OrderIdAsStringAccessor_4a76700cf8410b3a();
public static readonly NServiceBus.Sagas.CorrelationPropertyAccessor Instance = new OrderIdAsStringAccessor_912ea78b27a6e1ec();
}
}

Expand Down
Loading