diff --git a/src/Serilog.Settings.Configuration/ConfigurationLoggerConfigurationExtensions.cs b/src/Serilog.Settings.Configuration/ConfigurationLoggerConfigurationExtensions.cs
index 2282b1b..b6dea6a 100644
--- a/src/Serilog.Settings.Configuration/ConfigurationLoggerConfigurationExtensions.cs
+++ b/src/Serilog.Settings.Configuration/ConfigurationLoggerConfigurationExtensions.cs
@@ -12,6 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyModel;
@@ -43,6 +44,8 @@ public static class ConfigurationLoggerConfigurationExtensions
/// default will be used.
/// An object allowing configuration to continue.
[Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, ConfigurationReaderOptions readerOptions) instead.")]
+ [RequiresUnreferencedCode(TrimWarningMessages.NotSupportedWhenTrimming)]
+ [RequiresDynamicCode(TrimWarningMessages.NotSupportedInAot)]
public static LoggerConfiguration Configuration(
this LoggerSettingsConfiguration settingConfiguration,
IConfiguration configuration,
@@ -68,6 +71,8 @@ public static LoggerConfiguration Configuration(
/// default will be used.
/// An object allowing configuration to continue.
[Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, ConfigurationReaderOptions readerOptions) instead.")]
+ [RequiresUnreferencedCode(TrimWarningMessages.NotSupportedWhenTrimming)]
+ [RequiresDynamicCode(TrimWarningMessages.NotSupportedInAot)]
public static LoggerConfiguration Configuration(
this LoggerSettingsConfiguration settingConfiguration,
IConfiguration configuration,
@@ -84,6 +89,9 @@ public static LoggerConfiguration Configuration(
/// default will be used.
/// An object allowing configuration to continue.
[Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, string sectionName, DependencyContext dependencyContext) instead.")]
+ [RequiresUnreferencedCode(TrimWarningMessages.NotSupportedWhenTrimming)]
+ [RequiresDynamicCode(TrimWarningMessages.NotSupportedInAot)]
+ [RequiresAssemblyFiles(TrimWarningMessages.IncompatibleWithSingleFile)]
public static LoggerConfiguration ConfigurationSection(
this LoggerSettingsConfiguration settingConfiguration,
IConfigurationSection configSection,
@@ -115,6 +123,8 @@ public static LoggerConfiguration ConfigurationSection(
/// Defines how the package identifies assemblies to scan for sinks and other types.
/// An object allowing configuration to continue.
[Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, ConfigurationReaderOptions readerOptions) instead.")]
+ [RequiresUnreferencedCode(TrimWarningMessages.NotSupportedWhenTrimming)]
+ [RequiresDynamicCode(TrimWarningMessages.NotSupportedInAot)]
public static LoggerConfiguration Configuration(
this LoggerSettingsConfiguration settingConfiguration,
IConfiguration configuration,
@@ -139,6 +149,8 @@ public static LoggerConfiguration Configuration(
/// Defines how the package identifies assemblies to scan for sinks and other types.
/// An object allowing configuration to continue.
[Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, ConfigurationReaderOptions readerOptions) instead.")]
+ [RequiresUnreferencedCode(TrimWarningMessages.NotSupportedWhenTrimming)]
+ [RequiresDynamicCode(TrimWarningMessages.NotSupportedInAot)]
public static LoggerConfiguration Configuration(
this LoggerSettingsConfiguration settingConfiguration,
IConfiguration configuration,
@@ -154,6 +166,8 @@ public static LoggerConfiguration Configuration(
/// Defines how the package identifies assemblies to scan for sinks and other types.
/// An object allowing configuration to continue.
[Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, string sectionName, ConfigurationAssemblySource configurationAssemblySource) instead.")]
+ [RequiresUnreferencedCode(TrimWarningMessages.NotSupportedWhenTrimming)]
+ [RequiresDynamicCode(TrimWarningMessages.NotSupportedInAot)]
public static LoggerConfiguration ConfigurationSection(
this LoggerSettingsConfiguration settingConfiguration,
IConfigurationSection configSection,
@@ -176,6 +190,8 @@ public static LoggerConfiguration ConfigurationSection(
/// A collection of assemblies that contains sinks and other types.
/// An object allowing configuration to continue.
[Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, ConfigurationReaderOptions readerOptions) instead.")]
+ [RequiresUnreferencedCode(TrimWarningMessages.NotSupportedWhenTrimming)]
+ [RequiresDynamicCode(TrimWarningMessages.NotSupportedInAot)]
public static LoggerConfiguration Configuration(
this LoggerSettingsConfiguration settingConfiguration,
IConfiguration configuration,
@@ -198,6 +214,8 @@ public static LoggerConfiguration Configuration(
/// A collection of assemblies that contains sinks and other types.
/// An object allowing configuration to continue.
[Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, ConfigurationReaderOptions readerOptions) instead.")]
+ [RequiresUnreferencedCode(TrimWarningMessages.NotSupportedWhenTrimming)]
+ [RequiresDynamicCode(TrimWarningMessages.NotSupportedInAot)]
public static LoggerConfiguration Configuration(
this LoggerSettingsConfiguration settingConfiguration,
IConfiguration configuration,
@@ -211,6 +229,8 @@ public static LoggerConfiguration Configuration(
/// A configuration object which contains a Serilog section.
/// Options to adjust how the configuration object is processed.
/// An object allowing configuration to continue.
+ [RequiresUnreferencedCode(TrimWarningMessages.NotSupportedWhenTrimming)]
+ [RequiresDynamicCode(TrimWarningMessages.NotSupportedInAot)]
public static LoggerConfiguration Configuration(
this LoggerSettingsConfiguration settingConfiguration,
IConfiguration configuration,
@@ -225,6 +245,8 @@ public static LoggerConfiguration Configuration(
return settingConfiguration.Settings(configurationReader);
}
+ [RequiresUnreferencedCode(TrimWarningMessages.UnboundedReflection)]
+ [RequiresDynamicCode(TrimWarningMessages.CreatesArraysOfArbitraryTypes)]
static ConfigurationReader GetConfigurationReader(IConfiguration configuration, ConfigurationReaderOptions readerOptions, DependencyContext? dependencyContext)
{
var assemblyFinder = dependencyContext == null ? AssemblyFinder.Auto() : AssemblyFinder.ForDependencyContext(dependencyContext);
@@ -232,6 +254,8 @@ static ConfigurationReader GetConfigurationReader(IConfiguration configuration,
return new ConfigurationReader(section, assemblyFinder, readerOptions, configuration);
}
+ [RequiresUnreferencedCode(TrimWarningMessages.UnboundedReflection)]
+ [RequiresDynamicCode(TrimWarningMessages.CreatesArraysOfArbitraryTypes)]
static ConfigurationReader GetConfigurationReader(IConfiguration configuration, ConfigurationReaderOptions readerOptions, ConfigurationAssemblySource source)
{
var assemblyFinder = AssemblyFinder.ForSource(source);
@@ -239,6 +263,8 @@ static ConfigurationReader GetConfigurationReader(IConfiguration configuration,
return new ConfigurationReader(section, assemblyFinder, readerOptions, configuration);
}
+ [RequiresUnreferencedCode(TrimWarningMessages.UnboundedReflection)]
+ [RequiresDynamicCode(TrimWarningMessages.CreatesArraysOfArbitraryTypes)]
static ConfigurationReader GetConfigurationReader(IConfiguration configuration, ConfigurationReaderOptions readerOptions, IReadOnlyCollection assemblies)
{
var section = string.IsNullOrWhiteSpace(readerOptions.SectionName) ? configuration : configuration.GetSection(readerOptions.SectionName);
diff --git a/src/Serilog.Settings.Configuration/Serilog.Settings.Configuration.csproj b/src/Serilog.Settings.Configuration/Serilog.Settings.Configuration.csproj
index bb1c192..2eb653d 100644
--- a/src/Serilog.Settings.Configuration/Serilog.Settings.Configuration.csproj
+++ b/src/Serilog.Settings.Configuration/Serilog.Settings.Configuration.csproj
@@ -4,7 +4,7 @@
Microsoft.Extensions.Configuration (appsettings.json) support for Serilog.
4.0.0
Serilog Contributors
- netstandard2.0;net461
+ net7.0;netstandard2.0;net461
true
Serilog.Settings.Configuration
serilog;json
@@ -15,6 +15,10 @@
true
true
snupkg
+ true
+ true
+ true
+ true
@@ -25,7 +29,7 @@
-
+
diff --git a/src/Serilog.Settings.Configuration/Settings/Configuration/Assemblies/AssemblyFinder.cs b/src/Serilog.Settings.Configuration/Settings/Configuration/Assemblies/AssemblyFinder.cs
index 7fcbe38..c31ed3c 100644
--- a/src/Serilog.Settings.Configuration/Settings/Configuration/Assemblies/AssemblyFinder.cs
+++ b/src/Serilog.Settings.Configuration/Settings/Configuration/Assemblies/AssemblyFinder.cs
@@ -1,4 +1,5 @@
-using System.Reflection;
+using System.Diagnostics.CodeAnalysis;
+using System.Reflection;
using Microsoft.Extensions.DependencyModel;
namespace Serilog.Settings.Configuration.Assemblies;
@@ -12,6 +13,7 @@ protected static bool IsCaseInsensitiveMatch(string? text, string textToFind)
return text != null && text.ToLowerInvariant().Contains(textToFind.ToLowerInvariant());
}
+ [RequiresAssemblyFiles(TrimWarningMessages.IncompatibleWithSingleFile)]
public static AssemblyFinder Auto()
{
try
diff --git a/src/Serilog.Settings.Configuration/Settings/Configuration/Assemblies/DllScanningAssemblyFinder.cs b/src/Serilog.Settings.Configuration/Settings/Configuration/Assemblies/DllScanningAssemblyFinder.cs
index 38ff3c4..8fc7144 100644
--- a/src/Serilog.Settings.Configuration/Settings/Configuration/Assemblies/DllScanningAssemblyFinder.cs
+++ b/src/Serilog.Settings.Configuration/Settings/Configuration/Assemblies/DllScanningAssemblyFinder.cs
@@ -1,9 +1,11 @@
+using System.Diagnostics.CodeAnalysis;
using System.Reflection;
namespace Serilog.Settings.Configuration.Assemblies;
sealed class DllScanningAssemblyFinder : AssemblyFinder
{
+ [RequiresAssemblyFiles(TrimWarningMessages.IncompatibleWithSingleFile)]
public override IReadOnlyList FindAssembliesContainingName(string nameToFind)
{
var probeDirs = new List();
diff --git a/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs b/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs
index 46eca3c..8d6dc97 100644
--- a/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs
+++ b/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs
@@ -1,3 +1,4 @@
+using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text.RegularExpressions;
@@ -13,6 +14,8 @@
namespace Serilog.Settings.Configuration;
+[RequiresUnreferencedCode(TrimWarningMessages.UnboundedReflection)]
+[RequiresDynamicCode(TrimWarningMessages.CreatesArraysOfArbitraryTypes)]
class ConfigurationReader : IConfigurationReader
{
const string LevelSwitchNameRegex = @"^\${0,1}[A-Za-z]+[A-Za-z0-9]*$";
@@ -298,6 +301,7 @@ void ApplyEnrichment(LoggerConfiguration loggerConfiguration)
}
}
+ [RequiresDynamicCode(TrimWarningMessages.CreatesArraysOfArbitraryTypes)]
internal ILookup> GetMethodCalls(IConfiguration directive)
{
var children = directive.GetChildren().ToList();
@@ -331,6 +335,7 @@ static string GetSectionName(IConfigurationSection s)
}
}
+ [RequiresDynamicCode(TrimWarningMessages.CreatesArraysOfArbitraryTypes)]
internal static IConfigurationArgumentValue GetArgumentValue(IConfigurationSection argumentSection, IReadOnlyCollection configurationAssemblies)
{
IConfigurationArgumentValue argumentValue;
@@ -359,7 +364,7 @@ internal static IConfigurationArgumentValue GetArgumentValue(IConfigurationSecti
static IReadOnlyCollection LoadConfigurationAssemblies(IConfiguration section, AssemblyFinder assemblyFinder)
{
var serilogAssembly = typeof(ILogger).Assembly;
- var assemblies = new Dictionary { [serilogAssembly.FullName] = serilogAssembly };
+ var assemblies = new Dictionary { [serilogAssembly.FullName!] = serilogAssembly };
var usingSection = section.GetSection("Using");
if (usingSection.GetChildren().Any())
@@ -371,16 +376,16 @@ static IReadOnlyCollection LoadConfigurationAssemblies(IConfiguration
"A zero-length or whitespace assembly name was supplied to a Serilog.Using configuration statement.");
var assembly = Assembly.Load(new AssemblyName(simpleName));
- if (!assemblies.ContainsKey(assembly.FullName))
- assemblies.Add(assembly.FullName, assembly);
+ if (!assemblies.ContainsKey(assembly.FullName!))
+ assemblies.Add(assembly.FullName!, assembly);
}
}
foreach (var assemblyName in assemblyFinder.FindAssembliesContainingName("serilog"))
{
var assumed = Assembly.Load(assemblyName);
- if (assumed != null && !assemblies.ContainsKey(assumed.FullName))
- assemblies.Add(assumed.FullName, assumed);
+ if (assumed != null && !assemblies.ContainsKey(assumed.FullName!))
+ assemblies.Add(assumed.FullName!, assumed);
}
return assemblies.Values.ToList().AsReadOnly();
@@ -504,6 +509,7 @@ static bool ParameterNameMatches(string? actualParameterName, IEnumerable ParameterNameMatches(actualParameterName, s));
}
+ [RequiresUnreferencedCode(TrimWarningMessages.UnboundedReflection)]
static IReadOnlyCollection FindSinkConfigurationMethods(IReadOnlyCollection configurationAssemblies, bool allowInternalTypes, bool allowInternalMethods)
{
var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerSinkConfiguration), allowInternalTypes, allowInternalMethods);
@@ -513,6 +519,7 @@ static IReadOnlyCollection FindSinkConfigurationMethods(IReadOnlyCol
return found;
}
+ [RequiresUnreferencedCode(TrimWarningMessages.UnboundedReflection)]
static IReadOnlyCollection FindAuditSinkConfigurationMethods(IReadOnlyCollection configurationAssemblies, bool allowInternalTypes, bool allowInternalMethods)
{
var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerAuditSinkConfiguration), allowInternalTypes, allowInternalMethods);
@@ -521,6 +528,7 @@ static IReadOnlyCollection FindAuditSinkConfigurationMethods(IReadOn
return found;
}
+ [RequiresUnreferencedCode(TrimWarningMessages.UnboundedReflection)]
static IReadOnlyCollection FindFilterConfigurationMethods(IReadOnlyCollection configurationAssemblies, bool allowInternalTypes, bool allowInternalMethods)
{
var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerFilterConfiguration), allowInternalTypes, allowInternalMethods);
@@ -530,6 +538,7 @@ static IReadOnlyCollection FindFilterConfigurationMethods(IReadOnlyC
return found;
}
+ [RequiresUnreferencedCode(TrimWarningMessages.UnboundedReflection)]
static IReadOnlyCollection FindDestructureConfigurationMethods(IReadOnlyCollection configurationAssemblies, bool allowInternalTypes, bool allowInternalMethods)
{
var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerDestructuringConfiguration), allowInternalTypes, allowInternalMethods);
@@ -539,6 +548,7 @@ static IReadOnlyCollection FindDestructureConfigurationMethods(IRead
return found;
}
+ [RequiresUnreferencedCode(TrimWarningMessages.UnboundedReflection)]
static IReadOnlyCollection FindEventEnricherConfigurationMethods(IReadOnlyCollection configurationAssemblies, bool allowInternalTypes, bool allowInternalMethods)
{
var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerEnrichmentConfiguration), allowInternalTypes, allowInternalMethods);
@@ -548,6 +558,7 @@ static IReadOnlyCollection FindEventEnricherConfigurationMethods(IRe
return found;
}
+ [RequiresUnreferencedCode(TrimWarningMessages.UnboundedReflection)]
static List FindConfigurationExtensionMethods(IReadOnlyCollection configurationAssemblies, Type configType, bool allowInternalTypes, bool allowInternalMethods)
{
// ExtensionAttribute can be polyfilled to support extension methods
diff --git a/src/Serilog.Settings.Configuration/Settings/Configuration/ObjectArgumentValue.cs b/src/Serilog.Settings.Configuration/Settings/Configuration/ObjectArgumentValue.cs
index 3a15457..04fc193 100644
--- a/src/Serilog.Settings.Configuration/Settings/Configuration/ObjectArgumentValue.cs
+++ b/src/Serilog.Settings.Configuration/Settings/Configuration/ObjectArgumentValue.cs
@@ -8,6 +8,8 @@
namespace Serilog.Settings.Configuration;
+[RequiresUnreferencedCode(TrimWarningMessages.UnboundedReflection)]
+[RequiresDynamicCode(TrimWarningMessages.CreatesArraysOfArbitraryTypes)]
class ObjectArgumentValue : IConfigurationArgumentValue
{
readonly IConfigurationSection _section;
@@ -98,6 +100,7 @@ bool TryCreateContainer([NotNullWhen(true)] out object? result)
}
}
+ [RequiresUnreferencedCode(TrimWarningMessages.UnboundedReflection)]
internal static bool TryBuildCtorExpression(
IConfigurationSection section, Type parameterType, ResolutionContext resolutionContext, [NotNullWhen(true)] out NewExpression? ctorExpression)
{
@@ -218,7 +221,9 @@ static bool TryBindToCtorArgument(object value, Type type, ResolutionContext res
}
}
- static bool IsContainer(Type type, [NotNullWhen(true)] out Type? elementType)
+ static bool IsContainer(
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.Interfaces)] Type type,
+ [NotNullWhen(true)] out Type? elementType)
{
elementType = null;
foreach (var iface in type.GetInterfaces())
diff --git a/src/Serilog.Settings.Configuration/Settings/Configuration/StringArgumentValue.cs b/src/Serilog.Settings.Configuration/Settings/Configuration/StringArgumentValue.cs
index ebf3d2e..225da10 100644
--- a/src/Serilog.Settings.Configuration/Settings/Configuration/StringArgumentValue.cs
+++ b/src/Serilog.Settings.Configuration/Settings/Configuration/StringArgumentValue.cs
@@ -1,4 +1,4 @@
-using System.Diagnostics.CodeAnalysis;
+using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Text.RegularExpressions;
@@ -6,6 +6,7 @@
namespace Serilog.Settings.Configuration;
+[RequiresUnreferencedCode(TrimWarningMessages.UnboundedReflection)]
class StringArgumentValue : IConfigurationArgumentValue
{
readonly string _providedValue;
@@ -157,6 +158,7 @@ public StringArgumentValue(string providedValue)
return Convert.ChangeType(argumentValue, toType, resolutionContext.ReaderOptions.FormatProvider);
}
+ [RequiresUnreferencedCode(TrimWarningMessages.UnboundedReflection)]
internal static Type? FindType(string typeName)
{
var type = Type.GetType(typeName);
diff --git a/src/Serilog.Settings.Configuration/TrimWarningMessages.cs b/src/Serilog.Settings.Configuration/TrimWarningMessages.cs
new file mode 100644
index 0000000..65d3333
--- /dev/null
+++ b/src/Serilog.Settings.Configuration/TrimWarningMessages.cs
@@ -0,0 +1,14 @@
+
+using System.Data;
+
+namespace Serilog
+{
+ internal static class TrimWarningMessages
+ {
+ public const string NotSupportedWhenTrimming = "Automatic configuration is not supported when trimming.";
+ public const string NotSupportedInAot = "Automatic configuration is not supported when AOT compiling.";
+ public const string UnboundedReflection = "Uses unbounded reflection to load types";
+ public const string CreatesArraysOfArbitraryTypes = "Creates arrays of arbitrary types";
+ public const string IncompatibleWithSingleFile = "Incompatible with single-file publishing";
+ }
+}
\ No newline at end of file