HotLIB 1.0.8816.682-beta

This is a prerelease version of HotLIB.
dotnet add package HotLIB --version 1.0.8816.682-beta
NuGet\Install-Package HotLIB -Version 1.0.8816.682-beta
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="HotLIB" Version="1.0.8816.682-beta" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add HotLIB --version 1.0.8816.682-beta
#r "nuget: HotLIB, 1.0.8816.682-beta"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install HotLIB as a Cake Addin
#addin nuget:?package=HotLIB&version=1.0.8816.682-beta&prerelease

// Install HotLIB as a Cake Tool
#tool nuget:?package=HotLIB&version=1.0.8816.682-beta&prerelease

HotAPI

Biblioteca complementar à <a href="https://github.com/mrebello/HotLIB">HotLIB</a> para a criação de WebAPIs ou aplicações WEB.

Rotinas básicas para aplicações, baseada em .NET 6, para serviços, envolvendo:

  • Config
  • Log
  • BD (acesso direto sem ORM)
  • SelfHostedService
  • HTTP selfhosted (kestrel)

E ajustes no .xml do projeto para ter versionamento automático (editar a mão)

<PropertyGroup>
	<Title>Título da aplicação</Title>
	<Description>Descrição do serviço da aplicação - é a que será usada em services com o serviço instalado.</Description>

	<VersionBase>1.0</VersionBase>
	<VersionSuffix>-beta</VersionSuffix>
	<AssemblyVersion>$(VersionBase).$([System.DateTime]::Now.Subtract("2000-01-01").Days).$([System.DateTime]::Now.TimeOfDay.TotalMinutes.ToString("0"))</AssemblyVersion>
	<FileVersion>$(AssemblyVersion)</FileVersion>
	<VersionPrefix>$(AssemblyVersion)</VersionPrefix>
	<Version>$(VersionPrefix)$(VersionSuffix)</Version>

A linha do <AssemblyVersion> coloca como versão do assembly a <VersionBase> + '.' + (número de dias a partir da data base (2000-01-01)) + '.' + (número de minutos do dia), gerando um número de versão próximo ao "1.0.*", porém permitindo que esse número seja usado nos pacotes e mantendo a compilação determinística.

Config

Usa System.Configuration.ConfigurationManager.

Sequência dos locais de configuração padrão alterados para permitir que o appsettings.json fique embutido no executável.

adicionando:

  • classe estática global para uso na aplicação como um todo
  • Ambiente de desenvolvimento "Development" definido via variável de ambiente nas propriedades de depuração (DOTNET_ENVIRONMENT=Development) ou parâmetros na linha de comando
  • configurações 'padrão' do aplicativo ficam no arquivo AppSettings.JSON, que deve estar incorporado no APP
  • Procura configuração também em {exename}.conf e em /etc/{assemblername}.conf antes da linha de comando
  • Linha de comando = appupdate.exe /MySetting:SomeValue=123
  • Variáveis de Ambiente = set Logging__LogLevel__Microsoft=Information (__ ao invés de : na variável de ambiente em sistemas linux)

Uso normal:

  • appsettings.json incorporado na aplicação
  • appsettings.Development.json não incorporado
  • user-secrets para guardar senhas de desenvolvimento
  • xxxxx.json (xxxxx = nome do executável) para guardar configurações do ambiente de execução (para permitir empacotamento em arquivo único, e uso de diversos microserviços em mesmo diretório)

exemplo de uso: (instância Config é global, instanciada automaticamente pela biblioteca)

string app_me = Config["AppName"];

Log

Usa Microsoft.Extensions.Logging, adicionado:

  • emailLogger: envio de log por email (usando System.Net.Mail)
  • facilidades para criar categoria de log e recurso para Information e Debug usando lambda (para não degradar a performance da aplicação)

exemplos de uso:

  • padrão (instância Log é global, instanciada automaticamente pela biblioteca)

      Log.LogError($"Tentativa de atualização de IP não autorizado. IP: {IPOrigem}");
    
  • com categoria

      ILogger L = Log.Create("Hot.HttpServer");
      ...
      L.LogInformation("~HttpServer: Fechando listener");
    
  • com lambda

      Log.LogInformation(() => Log.Msg( funcao_demorada(c) ));
    

BD

Classe para acesso a banco de dados (sqlserver, usando System.Data.SqlClient), adicionando:

  • Conexão automática (com ou sem transação), com retry automático
  • Comandos SQL com parâmetros de forma simples
  • Log dos comandos (nível de log nas configurações)

appsettings.json para vários bancos:

"ConnectionStrings": {
   "DefaultConnection": "Server=localhost;Trusted_Connection=True",
   "BDweb": "Server=bd2;Database=bd2;user=sa;password=%(BD2:passwd_bdweb)%", // expande para senha em configurações (user-secrets, por exemplo)
},

declaração para uso com diversos bancos na aplicação:

global using static nnnn.BD.SQL;

namespace nnnnn.BD {
    public class BDs : BD_simples {
        public BDs() : base(null) {
        }
        public BD_simples BDweb = new BD_simples("BDweb");
        public BD_simples BD2 = new BD_simples("BD2");
    }

    public static class SQL {
        public static BDs BD = new BDs();
    }
}

uso na aplicação: (não é necessário nenhuma declaração antes do uso)

BD.BDweb.SQLCmd("UPDATE CRM_email_Enviado SET Data_leitura=getdate() WHERE Cod_CRM_email_Enviado=@1 AND Data_Leitura IS NULL", Cod_CRM_email_Enviado);

SelfHostedService

Classe abstrata para ser usada para criação de serviços sefthosted.

Baseada no IHostedService, adicionando:

  • MainDefault para ser usada como função básica da classe, que implementa parâmetros padrões de linha de comando:
    • /? - help
    • /helpconfig - lista sequência de pesquisa de arquivos de configuração
    • /install
    • /uninstall - instala a aplicação como serviço do windows (falta implementar linux). Dados de nome do serviço e descrição são pegos dos metadados da aplicação)
    • /autoupdate - recurso para atualização do executável 'de produção' automaticamente via nova versão do desenvolvimento, tratando também a aplicação em produção instalada como serviço do windows (apenas para aplicações httpserver)
  • método StartAsync e StopAsync abstratos para implementação do serviço

HttpServer

Classe abstrata para aplicação de um servidor http simples.

Baseada no HttpListener, adiciona:

  • método abstrato Process(HttpListenerContext context) para processar os pedidos, já sendo chamado de forma assíncrona pelo tratamento do listener
  • pré-processamento para devolver versão e fazer o autoupdate da aplicação

exemplo de uma aplicação de httpserver:

internal class Program : HttpServer {
    public static void Main(string[] args) {
        MainDefault<Program>();
    }

    public override void Process(HttpListenerContext context) {
        string url = RemoveIgnorePrefix(context?.Request.Url?.LocalPath);

        if (url == "/teste") {
            string infos = $@"Infos:
              IsWindows = {Config["IsWindows"]}
              IsLinux = {Config["IsLinux"]}
              Ambiente = {Config["Environment"]}
              AppName = {Config["AppName"]}
              Config search path = {HotConfiguration.configSearchPath}
              Teste = {Config["Teste"]}";

            context?.Response.Send(infos.ReplaceLineEndings("<br>"));
        }
    }
}
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on HotLIB:

Package Downloads
HotAPI

WebAPIs usando biblioteca de funções Hot. Classe para criar WebAPIs com configurações do servidor em arquivo de configuração embutido na aplicação, bastando alterar a configuração para incluir recursos na API.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.8816.682-beta 66 2/20/2024
1.0.8816.671-beta 46 2/20/2024
1.0.8732.1072-beta 164 11/28/2023
1.0.8732.1047-beta 62 11/28/2023
1.0.8635.582-beta 90 8/23/2023
1.0.8574.1019-beta 91 6/23/2023
1.0.8573.719-beta 82 6/22/2023
1.0.8564.677-beta 81 6/13/2023
1.0.8530.693-beta 91 5/10/2023
1.0.8528.760-beta 92 5/8/2023
1.0.8518.969-beta 96 4/28/2023
1.0.8515.1048-beta 99 4/25/2023
1.0.8515.988-beta 100 4/25/2023
1.0.8514.592-beta 96 4/24/2023
1.0.8511.1306-beta 102 4/22/2023
1.0.8507.902-beta 97 4/17/2023
1.0.8504.555-beta 107 4/14/2023
1.0.1-beta 112 4/11/2023
1.0.0-beta 144 4/5/2023