From 4dd0974c6f2194eb3570c5a7e4e0922bb2fe01ea Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 12 Aug 2026 14:40:47 +0200 Subject: [PATCH] Add multi-targeting support for .NET frameworks Introduced conditional compilation using `#if NET` directives to enable support for multiple frameworks (`net462`, `net480`, and `net8.0`). Updated the project file to support multi-targeting and added framework-specific dependencies conditionally. Refactored namespaces, interfaces, classes, validators, and handlers to ensure compatibility with targeted frameworks. Enhanced dependency injection setup and adjusted logic in `GetSenderQueryHandler` for framework-specific behavior. Ensured consistency and maintainability by wrapping framework- specific code blocks with `#if NET` directives. --- .../Common/Interfaces/IImapEmailService.cs | 2 ++ .../Common/Mappings/EmailMappingProfile.cs | 2 ++ .../Common/Models/MailSearch/DateFilter.cs | 2 ++ .../Common/Models/MailSearch/MailSearchFilter.cs | 6 ++++-- .../Common/Models/MailSearch/UidFilter.cs | 6 ++++-- .../Common/Options/EmailAccountsOptions.cs | 4 +++- .../DependencyInjection.cs | 3 ++- .../DigitalData.MessagingService.Application.csproj | 9 +++++---- .../EmailAccount/Queries/GetSenderQuery.cs | 8 +++++--- .../EmailAccount/Validators/GetSenderQueryValidator.cs | 2 ++ .../EmailReceiving/Commands/MarkEmailAsSeenCommand.cs | 2 ++ .../EmailReceiving/Queries/FetchEmailsQuery.cs | 2 ++ .../EmailReceiving/Validators/DateFilterValidator.cs | 6 ++++-- .../Validators/FetchEmailsQueryValidator.cs | 4 +++- .../Validators/MailSearchFilterValidator.cs | 4 +++- .../EmailReceiving/Validators/UidFilterValidator.cs | 6 ++++-- .../EmailSending/Commands/PublishEmailCommand.cs | 4 +++- .../EmailSending/Validators/SendEmailCommandValidator.cs | 2 ++ 18 files changed, 54 insertions(+), 20 deletions(-) diff --git a/src/core/DigitalData.MessagingService.Application/Common/Interfaces/IImapEmailService.cs b/src/core/DigitalData.MessagingService.Application/Common/Interfaces/IImapEmailService.cs index e11851d..d3c3681 100644 --- a/src/core/DigitalData.MessagingService.Application/Common/Interfaces/IImapEmailService.cs +++ b/src/core/DigitalData.MessagingService.Application/Common/Interfaces/IImapEmailService.cs @@ -1,3 +1,4 @@ +#if NET using DigitalData.MessagingService.Abstraction; using DigitalData.MessagingService.Application.Common.Models.MailSearch; @@ -31,3 +32,4 @@ public interface IImapEmailService string folder = "INBOX", CancellationToken cancellationToken = default); } +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/Common/Mappings/EmailMappingProfile.cs b/src/core/DigitalData.MessagingService.Application/Common/Mappings/EmailMappingProfile.cs index 2baf3ac..609942b 100644 --- a/src/core/DigitalData.MessagingService.Application/Common/Mappings/EmailMappingProfile.cs +++ b/src/core/DigitalData.MessagingService.Application/Common/Mappings/EmailMappingProfile.cs @@ -1,3 +1,4 @@ +#if NET using AutoMapper; using DigitalData.MessagingService.Application.EmailSending.Commands; using DigitalData.MessagingService.Abstraction; @@ -18,3 +19,4 @@ public class EmailMappingProfile : Profile .ForMember(dest => dest.Attachments, opt => opt.MapFrom(src => src.Attachments)); } } +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/Common/Models/MailSearch/DateFilter.cs b/src/core/DigitalData.MessagingService.Application/Common/Models/MailSearch/DateFilter.cs index 4d57386..366e349 100644 --- a/src/core/DigitalData.MessagingService.Application/Common/Models/MailSearch/DateFilter.cs +++ b/src/core/DigitalData.MessagingService.Application/Common/Models/MailSearch/DateFilter.cs @@ -1,3 +1,4 @@ +#if NET namespace DigitalData.MessagingService.Application.Common.Models.MailSearch; /// @@ -11,3 +12,4 @@ namespace DigitalData.MessagingService.Application.Common.Models.MailSearch; /// Earliest date to include (inclusive). Maps to IMAP SINCE. /// Latest date to include (inclusive). Maps to IMAP BEFORE (next day is used internally). public record DateFilter(DateTime? After = null, DateTime? Before = null); +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/Common/Models/MailSearch/MailSearchFilter.cs b/src/core/DigitalData.MessagingService.Application/Common/Models/MailSearch/MailSearchFilter.cs index 8d00d20..5cba2b8 100644 --- a/src/core/DigitalData.MessagingService.Application/Common/Models/MailSearch/MailSearchFilter.cs +++ b/src/core/DigitalData.MessagingService.Application/Common/Models/MailSearch/MailSearchFilter.cs @@ -1,4 +1,5 @@ -namespace DigitalData.MessagingService.Application.Common.Models.MailSearch; +#if NET +namespace DigitalData.MessagingService.Application.Common.Models.MailSearch; /// /// Describes all criteria and options used when searching an IMAP mailbox. @@ -75,4 +76,5 @@ public record MailSearchFilter /// See for rules between its fields. /// public DateFilter? Date { get; init; } = null; -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/Common/Models/MailSearch/UidFilter.cs b/src/core/DigitalData.MessagingService.Application/Common/Models/MailSearch/UidFilter.cs index 3981850..09ef4b9 100644 --- a/src/core/DigitalData.MessagingService.Application/Common/Models/MailSearch/UidFilter.cs +++ b/src/core/DigitalData.MessagingService.Application/Common/Models/MailSearch/UidFilter.cs @@ -1,4 +1,5 @@ -namespace DigitalData.MessagingService.Application.Common.Models.MailSearch; +#if NET +namespace DigitalData.MessagingService.Application.Common.Models.MailSearch; /// /// Constrains the search to a specific UID or a UID range. @@ -11,4 +12,5 @@ /// Lower bound of the UID range (inclusive). Ignored when is set. /// Upper bound of the UID range (inclusive). Ignored when is set. /// Exact UID to match. When set, and must be . -public record UidFilter(long? Min = null, long? Max = null, long? Absolute = null); \ No newline at end of file +public record UidFilter(long? Min = null, long? Max = null, long? Absolute = null); +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/Common/Options/EmailAccountsOptions.cs b/src/core/DigitalData.MessagingService.Application/Common/Options/EmailAccountsOptions.cs index 97e451e..f433890 100644 --- a/src/core/DigitalData.MessagingService.Application/Common/Options/EmailAccountsOptions.cs +++ b/src/core/DigitalData.MessagingService.Application/Common/Options/EmailAccountsOptions.cs @@ -1,4 +1,5 @@ -using DigitalData.MessagingService.Abstraction; +#if NET +using DigitalData.MessagingService.Abstraction; namespace DigitalData.MessagingService.Application.Common.Options; @@ -21,3 +22,4 @@ public class EmailAccountsOptions /// public int SyncIntervalSeconds { get; init; } = 300; } +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/DependencyInjection.cs b/src/core/DigitalData.MessagingService.Application/DependencyInjection.cs index a925d39..260ab0e 100644 --- a/src/core/DigitalData.MessagingService.Application/DependencyInjection.cs +++ b/src/core/DigitalData.MessagingService.Application/DependencyInjection.cs @@ -1,8 +1,8 @@ +#if NET using DigitalData.MessagingService.Application.Common.Options; using FluentValidation; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; using System.Reflection; namespace DigitalData.MessagingService.Application; @@ -43,3 +43,4 @@ public static class DependencyInjection return services; } } +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/DigitalData.MessagingService.Application.csproj b/src/core/DigitalData.MessagingService.Application/DigitalData.MessagingService.Application.csproj index dc9a302..b07274d 100644 --- a/src/core/DigitalData.MessagingService.Application/DigitalData.MessagingService.Application.csproj +++ b/src/core/DigitalData.MessagingService.Application/DigitalData.MessagingService.Application.csproj @@ -1,9 +1,10 @@  - net8.0 - enable - enable + net462;net480;net8.0 + enable + enable + latest @@ -11,7 +12,7 @@ - + diff --git a/src/core/DigitalData.MessagingService.Application/EmailAccount/Queries/GetSenderQuery.cs b/src/core/DigitalData.MessagingService.Application/EmailAccount/Queries/GetSenderQuery.cs index ce492bc..77c85bf 100644 --- a/src/core/DigitalData.MessagingService.Application/EmailAccount/Queries/GetSenderQuery.cs +++ b/src/core/DigitalData.MessagingService.Application/EmailAccount/Queries/GetSenderQuery.cs @@ -1,4 +1,5 @@ -using DigitalData.MessagingService.Application.Common.Options; +#if NET +using DigitalData.MessagingService.Application.Common.Options; using DigitalData.MessagingService.Abstraction; using MediatR; using Microsoft.Extensions.Logging; @@ -22,7 +23,7 @@ public class GetSenderQueryHandler(IOptions Options, ILogg { public Task Handle(GetSenderQuery request, CancellationToken cancellationToken) { - var accounts = request.Id is not null + var accounts = request.Id is not null ? Options.Value.Accounts.Where(a => a.Id == request.Id) : Options.Value.Accounts.Where(a => a.Username == request.Username); @@ -36,4 +37,5 @@ public class GetSenderQueryHandler(IOptions Options, ILogg return Task.FromResult(accounts.FirstOrDefault()); } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/EmailAccount/Validators/GetSenderQueryValidator.cs b/src/core/DigitalData.MessagingService.Application/EmailAccount/Validators/GetSenderQueryValidator.cs index b26ce32..61adbcd 100644 --- a/src/core/DigitalData.MessagingService.Application/EmailAccount/Validators/GetSenderQueryValidator.cs +++ b/src/core/DigitalData.MessagingService.Application/EmailAccount/Validators/GetSenderQueryValidator.cs @@ -1,3 +1,4 @@ +#if NET using DigitalData.MessagingService.Application.EmailAccount.Queries; using FluentValidation; @@ -25,3 +26,4 @@ public class GetSenderQueryValidator : AbstractValidator }); } } +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/EmailReceiving/Commands/MarkEmailAsSeenCommand.cs b/src/core/DigitalData.MessagingService.Application/EmailReceiving/Commands/MarkEmailAsSeenCommand.cs index d5d4ee4..6c5f23e 100644 --- a/src/core/DigitalData.MessagingService.Application/EmailReceiving/Commands/MarkEmailAsSeenCommand.cs +++ b/src/core/DigitalData.MessagingService.Application/EmailReceiving/Commands/MarkEmailAsSeenCommand.cs @@ -1,3 +1,4 @@ +#if NET using DigitalData.MessagingService.Application.Common.Interfaces; using DigitalData.MessagingService.Application.EmailAccount.Queries; using DigitalData.MessagingService.Domain.Exceptions; @@ -40,3 +41,4 @@ public class MarkEmailAsSeenCommandHandler( await ImapService.MarkAsSeenAsync(account, request.Uid, request.Folder, cancellationToken); } } +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/EmailReceiving/Queries/FetchEmailsQuery.cs b/src/core/DigitalData.MessagingService.Application/EmailReceiving/Queries/FetchEmailsQuery.cs index 7a5d610..a370581 100644 --- a/src/core/DigitalData.MessagingService.Application/EmailReceiving/Queries/FetchEmailsQuery.cs +++ b/src/core/DigitalData.MessagingService.Application/EmailReceiving/Queries/FetchEmailsQuery.cs @@ -1,3 +1,4 @@ +#if NET using DigitalData.MessagingService.Abstraction; using DigitalData.MessagingService.Application.Common.Interfaces; using DigitalData.MessagingService.Application.Common.Models.MailSearch; @@ -43,3 +44,4 @@ public class FetchEmailsQueryHandler( cancellationToken); } } +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/DateFilterValidator.cs b/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/DateFilterValidator.cs index 03b7e36..5b697db 100644 --- a/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/DateFilterValidator.cs +++ b/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/DateFilterValidator.cs @@ -1,4 +1,5 @@ -using DigitalData.MessagingService.Application.Common.Models.MailSearch; +#if NET +using DigitalData.MessagingService.Application.Common.Models.MailSearch; using FluentValidation; namespace DigitalData.MessagingService.Application.EmailReceiving.Validators; @@ -34,4 +35,5 @@ public class DateFilterValidator : AbstractValidator .WithMessage("Date.After must be earlier than Date.Before.") .When(x => x.After is not null && x.Before is not null); } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/FetchEmailsQueryValidator.cs b/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/FetchEmailsQueryValidator.cs index 6f19a49..5ce58b3 100644 --- a/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/FetchEmailsQueryValidator.cs +++ b/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/FetchEmailsQueryValidator.cs @@ -1,3 +1,4 @@ +#if NET using DigitalData.MessagingService.Application.EmailReceiving.Queries; using FluentValidation; @@ -19,4 +20,5 @@ public class FetchEmailsQueryValidator : AbstractValidator .WithMessage("Mail search filter must not be null.") .SetValidator(new MailSearchFilterValidator()); } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/MailSearchFilterValidator.cs b/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/MailSearchFilterValidator.cs index 51696cd..0819a44 100644 --- a/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/MailSearchFilterValidator.cs +++ b/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/MailSearchFilterValidator.cs @@ -1,3 +1,4 @@ +#if NET using DigitalData.MessagingService.Application.Common.Models.MailSearch; using FluentValidation; @@ -48,4 +49,5 @@ public class MailSearchFilterValidator : AbstractValidator .SetValidator(new DateFilterValidator()!) .When(x => x.Date is not null); } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/UidFilterValidator.cs b/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/UidFilterValidator.cs index b1e0b0b..4a5dd2c 100644 --- a/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/UidFilterValidator.cs +++ b/src/core/DigitalData.MessagingService.Application/EmailReceiving/Validators/UidFilterValidator.cs @@ -1,4 +1,5 @@ -using DigitalData.MessagingService.Application.Common.Models.MailSearch; +#if NET +using DigitalData.MessagingService.Application.Common.Models.MailSearch; using FluentValidation; namespace DigitalData.MessagingService.Application.EmailReceiving.Validators; @@ -45,4 +46,5 @@ public class UidFilterValidator : AbstractValidator .WithMessage("Uid.Min must be less than or equal to Uid.Max.") .When(x => x.Min is not null && x.Max is not null); } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/EmailSending/Commands/PublishEmailCommand.cs b/src/core/DigitalData.MessagingService.Application/EmailSending/Commands/PublishEmailCommand.cs index 016e7f2..bcc496f 100644 --- a/src/core/DigitalData.MessagingService.Application/EmailSending/Commands/PublishEmailCommand.cs +++ b/src/core/DigitalData.MessagingService.Application/EmailSending/Commands/PublishEmailCommand.cs @@ -1,3 +1,4 @@ +#if NET using AutoMapper; using DigitalData.MessagingService.Application.EmailAccount.Queries; using DigitalData.MessagingService.Domain.Exceptions; @@ -69,4 +70,5 @@ public class PublishEmailCommandHandler(ISender Sender, ISendingEmailPublisher P await Publisher.EnqueueAsync(sendingEmailEvent, cancellationToken); return sendingEmailEvent.Id; } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/src/core/DigitalData.MessagingService.Application/EmailSending/Validators/SendEmailCommandValidator.cs b/src/core/DigitalData.MessagingService.Application/EmailSending/Validators/SendEmailCommandValidator.cs index cadd5c2..ac0428e 100644 --- a/src/core/DigitalData.MessagingService.Application/EmailSending/Validators/SendEmailCommandValidator.cs +++ b/src/core/DigitalData.MessagingService.Application/EmailSending/Validators/SendEmailCommandValidator.cs @@ -1,3 +1,4 @@ +#if NET using DigitalData.MessagingService.Application.EmailSending.Commands; using FluentValidation; @@ -32,3 +33,4 @@ public class PublishEmailCommandValidator : AbstractValidator