All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
A partir desta entrada cada pacote NuGet é versionado individualmente
(<Version> declarado em cada .csproj em vez de centralizado em
Directory.Build.props). As entradas abaixo identificam o pacote e a
versão afetados.
- Repositório —
<Version>removido deDirectory.Build.propse movido para cada.csprojpublicável. Cada pacote agora evolui independentemente; alterações em um pacote não disparam mais um build novo dos demais. Pacotes que não tiveram alteração ficaram congelados em6.2.2. - CI — Workflows
release.ymlemcp-release.ymlpassaram a usar somente-p:PackageVersion=nodotnet pack. O-p:Version=anterior cascateava para todos os projetos do build graph (incluindoProjectReference), o que reescrevia silenciosamente a versão das dependências no.nuspece produzia pacotes com referências quebradas — sintoma observado emCodout.Framework.EF 6.3.0, publicado declarandoCodout.Framework.Data >= 6.3.0enquanto Data estava em 6.2.2 no csproj. - Repositório — Pacotes
Codout.Framework.DP,Codout.Framework.NetCore.Repository.CosmoseCodout.Framework.NetCore.Repository.DocumentDBmarcados com<IsPackable>false</IsPackable>e removidos de.github/release-packages.json. Os três estão abandonados (DP implementa umIRepository<T>antigo e referencia a pastaCodout.Framework.DALque não existe; Cosmos/DocumentDB targetamnetcoreapp2.0e referenciam projetosNetStandard.*ausentes). Mass-release agora ignora os três; consulteCLAUDE.mdantes de tentar revivê-los.
- Bump de versão técnico para alinhar com
Codout.Framework.EF 6.3.0. Não há alterações de código ou contrato emCodout.Framework.Data— esta versão existe para satisfazer a dependênciaCodout.Framework.Data >= 6.3.0declarada (incorretamente) pelo pacote EF 6.3.0 já publicado. Pacotes futuros do EF voltarão a depender da versão minor real de Data, agora que o workflow não cascateia mais o-p:Version=.
EFRepository.SaveOrUpdate/SaveOrUpdateAsyncdecidiam insert vs. update viaIEntity.IsTransient(), o que quebrava qualquer entidade que pré-atribuísse oIdno construtor (ex.:Id = Guid.NewGuid()). A entidade era marcada comoModifiede oSaveChangesfalhava ao tentarUPDATEem uma linha inexistente. Agora a decisão é feita inspecionandoContext.Entry(entity).Statee, para entidadesDetachedcom chave atribuída, consultando o banco viaFind/FindAsync.SaveOrUpdateAsyncdeixou de bloquear a thread chamandoFindsíncrono; agora usaFindAsynce respeita oCancellationTokenrecebido.- Quando o
SaveOrUpdateprecisa atualizar uma entidade existente, os valores são copiados viaEntry(existing).CurrentValues.SetValues(entity), preservando osOriginalValues(e portanto tokens de concorrência como[Timestamp]/RowVersion) trazidos do banco.
SaveOrUpdateem entidade já rastreada com estadoUnchangednão força mais a transição paraModified. Confia no change tracker para detectar mutações. Consumidores que dependiam do "force full update" devem chamarUpdate(entity)explicitamente.SaveOrUpdateem entidadeDetachedcom chave não-default agora executa um roundtrip ao banco (Find/FindAsync) para distinguir insert de update. Em hot paths onde a intenção é conhecida, prefiraSave(entity)ouUpdate(entity)para evitar a query.
- Codout.Mailer.Razor — novo pacote satélite que implementa
ITemplateEngineusando a engine Razor nativa do ASP.NET Core (IRazorViewEngine+RuntimeCompilation+EmbeddedFileProvider). - Extension method
AddMailerRazor()para registro do template engine Razor via DI. - Classe
RazorMailerOptionscom opçõesTemplateAssembly,RootNamespaceeEnableCache.
- Codout.Mailer — o core agora é agnóstico ao template engine. A interface
ITemplateEnginepermanece, mas nenhuma implementação é registrada automaticamente. AddMailer()não registra maisITemplateEnginepor padrão — o consumidor deve registrar viaAddMailerRazor()ou implementação própria.MailerOptionssimplificado — removidas propriedadesTemplateRootType,RazorLighte a classeRazorLightOptions.- Dependências
Microsoft.Extensions.*agora são referenciadas explicitamente noCodout.Mailer.csproj(antes eram transitivas via RazorLight).
- RazorLight — removida dependência do pacote
RazorLight 2.3.1do coreCodout.Mailer. - Classe
RazorTemplateEngineremovida do core (substituída porRazorViewTemplateEngineno pacoteCodout.Mailer.Razor). - Classe
RazorLightOptionsremovida do core.
Antes (v6.x):
services.AddMailer(configuration, options =>
{
options.TemplateRootType = typeof(Program);
options.RazorLight.DefaultNamespace = "MyApp.Templates";
});Depois (v7.0):
services.AddMailer(configuration);
services.AddMailerRazor(options =>
{
options.TemplateAssembly = typeof(Program).Assembly;
options.RootNamespace = "MyApp.Templates";
});- Previous release targeting .NET 10 with RazorLight-based template engine.