diff --git a/benchmarks/Riok.Mapperly.Benchmarks/MappingBenchmarks.cs b/benchmarks/Riok.Mapperly.Benchmarks/MappingBenchmarks.cs
index bf6c558df4..c9e0b86ad9 100644
--- a/benchmarks/Riok.Mapperly.Benchmarks/MappingBenchmarks.cs
+++ b/benchmarks/Riok.Mapperly.Benchmarks/MappingBenchmarks.cs
@@ -8,7 +8,6 @@ namespace Riok.Mapperly.Benchmarks;
[MemoryDiagnoser]
[InProcess]
-[HtmlExporter]
[JsonExporterAttribute.Full]
public class MappingBenchmarks
{
diff --git a/benchmarks/Riok.Mapperly.Benchmarks/Riok.Mapperly.Benchmarks.csproj b/benchmarks/Riok.Mapperly.Benchmarks/Riok.Mapperly.Benchmarks.csproj
index f651de69d2..e44fe84813 100644
--- a/benchmarks/Riok.Mapperly.Benchmarks/Riok.Mapperly.Benchmarks.csproj
+++ b/benchmarks/Riok.Mapperly.Benchmarks/Riok.Mapperly.Benchmarks.csproj
@@ -23,9 +23,15 @@
-
-
-
+
+ TargetFramework=netstandard2.0
+
+
+ TargetFramework=netstandard2.0
+
+
+ TargetFramework=netstandard2.0
+
diff --git a/benchmarks/Riok.Mapperly.Benchmarks/SourceGeneratorBenchmarks.cs b/benchmarks/Riok.Mapperly.Benchmarks/SourceGeneratorBenchmarks.cs
index e2047ea913..f363633ac7 100644
--- a/benchmarks/Riok.Mapperly.Benchmarks/SourceGeneratorBenchmarks.cs
+++ b/benchmarks/Riok.Mapperly.Benchmarks/SourceGeneratorBenchmarks.cs
@@ -10,7 +10,6 @@ namespace Riok.Mapperly.Benchmarks;
[MemoryDiagnoser]
[InProcess]
-[HtmlExporter]
[JsonExporterAttribute.Full]
public class SourceGeneratorBenchmarks
{
diff --git a/build/package.sh b/build/package.sh
index 65a636d7a1..7beb381571 100755
--- a/build/package.sh
+++ b/build/package.sh
@@ -18,6 +18,7 @@ for roslyn_version in "${roslyn_versions[@]}"; do
dotnet pack \
"${script_dir}/../src/Riok.Mapperly" \
-c Release \
+ /p:TargetFrameworks="netstandard2.0" \
/p:ROSLYN_VERSION="${roslyn_version}" \
-o "${artifacts_dir}/roslyn-${roslyn_version}" \
/p:Version="${RELEASE_VERSION}" \
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index 49de6fc194..aa6b723c0a 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -3,39 +3,34 @@
- netstandard2.0
+ netstandard2.0;net7.0embeddedtruetrue11
-
-
- <_Parameter1>Riok.Mapperly.IntegrationTests
-
<_Parameter1>$(MSBuildProjectName).Tests
-
-
-
-
-
-
allruntime; build; native; contentfiles; analyzers
+
+ all
+ runtime; build; native; contentfiles; analyzers
+
diff --git a/src/Polyfills/IsExternalInit.cs b/src/Polyfills/IsExternalInit.cs
deleted file mode 100644
index e5db0e701c..0000000000
--- a/src/Polyfills/IsExternalInit.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-#if !NET6_0_OR_GREATER
-using System.ComponentModel;
-
-namespace System.Runtime.CompilerServices;
-
-///
-/// Reserved to be used by the compiler for tracking metadata.
-/// This class should not be used by developers in source code.
-///
-[EditorBrowsable(EditorBrowsableState.Never)]
-internal static class IsExternalInit { }
-
-#endif
diff --git a/src/Polyfills/Nullable.cs b/src/Polyfills/Nullable.cs
deleted file mode 100644
index 7ba1508bc3..0000000000
--- a/src/Polyfills/Nullable.cs
+++ /dev/null
@@ -1,212 +0,0 @@
-// https://github.com/dotnet/runtime/blob/527f9ae88a0ee216b44d556f9bdc84037fe0ebda/src/libraries/System.Private.CoreLib/src/System/Diagnostics/CodeAnalysis/NullableAttributes.cs
-
-#pragma warning disable
-#define INTERNAL_NULLABLE_ATTRIBUTES
-
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-namespace System.Diagnostics.CodeAnalysis;
-
-#if NETSTANDARD2_0 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472 || NET48
-/// Specifies that null is allowed as an input even if the corresponding type disallows it.
-[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, Inherited = false)]
-#if SYSTEM_PRIVATE_CORELIB
- public
-#else
-internal
-#endif
-sealed class AllowNullAttribute : Attribute { }
-
-/// Specifies that null is disallowed as an input even if the corresponding type allows it.
-[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, Inherited = false)]
-#if SYSTEM_PRIVATE_CORELIB
- public
-#else
-internal
-#endif
-sealed class DisallowNullAttribute : Attribute { }
-
-/// Specifies that an output may be null even if the corresponding type disallows it.
-[AttributeUsage(
- AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue,
- Inherited = false
-)]
-#if SYSTEM_PRIVATE_CORELIB
- public
-#else
-internal
-#endif
-sealed class MaybeNullAttribute : Attribute { }
-
-/// Specifies that an output will not be null even if the corresponding type allows it. Specifies that an input argument was not null when the call returns.
-[AttributeUsage(
- AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue,
- Inherited = false
-)]
-#if SYSTEM_PRIVATE_CORELIB
- public
-#else
-internal
-#endif
-sealed class NotNullAttribute : Attribute { }
-
-/// Specifies that when a method returns , the parameter may be null even if the corresponding type disallows it.
-[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
-#if SYSTEM_PRIVATE_CORELIB
- public
-#else
-internal
-#endif
-sealed class MaybeNullWhenAttribute : Attribute
-{
- /// Initializes the attribute with the specified return value condition.
- ///
- /// The return value condition. If the method returns this value, the associated parameter may be null.
- ///
- public MaybeNullWhenAttribute(bool returnValue) => ReturnValue = returnValue;
-
- /// Gets the return value condition.
- public bool ReturnValue { get; }
-}
-
-/// Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it.
-[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
-#if SYSTEM_PRIVATE_CORELIB
- public
-#else
-internal
-#endif
-sealed class NotNullWhenAttribute : Attribute
-{
- /// Initializes the attribute with the specified return value condition.
- ///
- /// The return value condition. If the method returns this value, the associated parameter will not be null.
- ///
- public NotNullWhenAttribute(bool returnValue) => ReturnValue = returnValue;
-
- /// Gets the return value condition.
- public bool ReturnValue { get; }
-}
-
-/// Specifies that the output will be non-null if the named parameter is non-null.
-[AttributeUsage(
- AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue,
- AllowMultiple = true,
- Inherited = false
-)]
-#if SYSTEM_PRIVATE_CORELIB
- public
-#else
-internal
-#endif
-sealed class NotNullIfNotNullAttribute : Attribute
-{
- /// Initializes the attribute with the associated parameter name.
- ///
- /// The associated parameter name. The output will be non-null if the argument to the parameter specified is non-null.
- ///
- public NotNullIfNotNullAttribute(string parameterName) => ParameterName = parameterName;
-
- /// Gets the associated parameter name.
- public string ParameterName { get; }
-}
-
-/// Applied to a method that will never return under any circumstance.
-[AttributeUsage(AttributeTargets.Method, Inherited = false)]
-#if SYSTEM_PRIVATE_CORELIB
- public
-#else
-internal
-#endif
-sealed class DoesNotReturnAttribute : Attribute { }
-
-/// Specifies that the method will not return if the associated Boolean parameter is passed the specified value.
-[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
-#if SYSTEM_PRIVATE_CORELIB
- public
-#else
-internal
-#endif
-sealed class DoesNotReturnIfAttribute : Attribute
-{
- /// Initializes the attribute with the specified parameter value.
- ///
- /// The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to
- /// the associated parameter matches this value.
- ///
- public DoesNotReturnIfAttribute(bool parameterValue) => ParameterValue = parameterValue;
-
- /// Gets the condition parameter value.
- public bool ParameterValue { get; }
-}
-#endif
-
-#if NETSTANDARD2_0 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NETCOREAPP3_0 || NETCOREAPP3_1 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472 || NET48
-/// Specifies that the method or property will ensure that the listed field and property members have not-null values.
-[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
-#if SYSTEM_PRIVATE_CORELIB
- public
-#else
-internal
-#endif
-sealed class MemberNotNullAttribute : Attribute
-{
- /// Initializes the attribute with a field or property member.
- ///
- /// The field or property member that is promised to be not-null.
- ///
- public MemberNotNullAttribute(string member) => Members = new[] { member };
-
- /// Initializes the attribute with the list of field and property members.
- ///
- /// The list of field and property members that are promised to be not-null.
- ///
- public MemberNotNullAttribute(params string[] members) => Members = members;
-
- /// Gets field or property member names.
- public string[] Members { get; }
-}
-
-/// Specifies that the method or property will ensure that the listed field and property members have not-null values when returning with the specified return value condition.
-[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
-#if SYSTEM_PRIVATE_CORELIB
- public
-#else
-internal
-#endif
-sealed class MemberNotNullWhenAttribute : Attribute
-{
- /// Initializes the attribute with the specified return value condition and a field or property member.
- ///
- /// The return value condition. If the method returns this value, the associated parameter will not be null.
- ///
- ///
- /// The field or property member that is promised to be not-null.
- ///
- public MemberNotNullWhenAttribute(bool returnValue, string member)
- {
- ReturnValue = returnValue;
- Members = new[] { member };
- }
-
- /// Initializes the attribute with the specified return value condition and list of field and property members.
- ///
- /// The return value condition. If the method returns this value, the associated parameter will not be null.
- ///
- ///
- /// The list of field and property members that are promised to be not-null.
- ///
- public MemberNotNullWhenAttribute(bool returnValue, params string[] members)
- {
- ReturnValue = returnValue;
- Members = members;
- }
-
- /// Gets the return value condition.
- public bool ReturnValue { get; }
-
- /// Gets field or property member names.
- public string[] Members { get; }
-}
-#endif
diff --git a/src/Riok.Mapperly.Abstractions/ReferenceHandling/Internal/PreserveReferenceHandler.cs b/src/Riok.Mapperly.Abstractions/ReferenceHandling/Internal/PreserveReferenceHandler.cs
index f043e1e832..efa5159eba 100644
--- a/src/Riok.Mapperly.Abstractions/ReferenceHandling/Internal/PreserveReferenceHandler.cs
+++ b/src/Riok.Mapperly.Abstractions/ReferenceHandling/Internal/PreserveReferenceHandler.cs
@@ -37,7 +37,7 @@ private ReferenceHolder GetReferenceHolder()
private class ReferenceHolder
{
- private readonly Dictionary