Underwater – Construindo Libraries .NET Standard Profissionais

Underwater – Construindo Libraries .NET Standard Profissionais

Então você quer lançar uma library no Nuget.Org? Nesse post vou abordar Github Organization (Org), a integração do Org inteiro com seu Jenkins. No Jenkins vou falar de testes unitários, build, deploy, de projetos .NET Core usando Jenkins Pipeline/Jenkinsfile e publicação dos seus pacotes no MyGet e Nuget. Vou abordar cobertura de código e análise com SonarQube, tudo que estou começando a implantar nos meus projetos.

(mais…)

Contract Package – Uma excelente alternativa ao Service Reference

Contract Package – Uma excelente alternativa ao Service Reference

Falar de WCF em meados de 2017 parece algo sem sentido, no entanto considero relevante tornar públicas soluções e alternativas que muitas vezes só apresentava dentro dos times por onde passei. São soluções, ideias, conceitos que ajudam no desenvolvimento e tornam o dia-a-dia de desenvolvimento mais fácil para quem está ciente dos conceitos ao redor da plataforma. Ignorei a possibilidade de publicar esse tipo de conteúdo para evitar exposição, já que obviamente, os preguiçosos irão reclamar, e muito! De qualquer forma asseguro, se você usa WCF e nunca viu esses conceitos, acredito que ao concluir esse post verá a tecnologia como algo menos místico, e até poderá criar alguma empatia por ela. É ambiciosa a minha proposta, eu sei!

(mais…)

[deprecated]Oragon.BuildTools.NugetTools – Utilitário de linha de comando para sincronizar arquivos NuSpec

[deprecated]Oragon.BuildTools.NugetTools – Utilitário de linha de comando para sincronizar arquivos NuSpec

[deprecated]

Olá, como vai você?

a partir da seguintes demandas, criei um executável utilizável de linha de comando que ajuda na atualização de Nuspec files.

Premissas

  • Minha solution tem uns 25 projetos e são todas bibliotecas publicáveis no NuGet.
  • Se tentar gerar os pacotes com base no CSPROJ, faltam metadados (assemblyInfo) para preencher todos os campos de metadados do Nuspec
  • Além da falta de metadados no assemblyInfo, para alguns dos projetos, preciso de mais complexos (o csproj não contempla as informações que preciso) embora sejam poucos, eles existem.

 Nuget-600x300[1]

Problemas endereçados

  • Quando adiciono referências no meu projeto, isso não se reflete no nuspec do projeto, mesmo que estas sejam oriundas de pacotes nuget e atualizem o packages.config
  • Os utilitários de linha de comando do Nuspec sabem gerar um novo nuspec, mas não sabem que meus projetos serão dependências nuspec dos próprios projetos, pois na mesma solution, é preferimos adicionar referências por projetos.
  • Gosto de refactoring, e me proponho a cada funcionalidade revalidar o posicionamento e estratégia de empacotamento dos projetos, assim os projetos mudam. Funcionalidades são quebradas em novos projetos, e esse é o dia-a-dia. Ao começar a gerar pacotes nuget, percebi que perdi essa flexibilidade, por causa do esforço de atualização.

Oragon.BuildTools.NugetTools

Endereçando esses problemas, criei um projeto, bem simples. Não passam de 10 classes, está disponível em https://github.com/luizcarlosfaria/Oragon.BuildTools

Executando:

Oragon.BuildTools.NugetTools.exe /mergenuspec /solution="D:\Projetos\Oragon.Architecture\[Source]\OragonArchitecture.sln" /convertSolutionProjectsInNugetReferences /createNuspecIfNeed=".nuget\NuGet.exe"

 1) /mergenuspec

Obrigatório

Hoje é a única operação conhecida pelo projeto. Determina que será feito um merge entre seu CSPROJ e seu NUSPEC respectivo.

2) /solution=“D:\Projetos\Oragon.Architecture\[Source]\OragonArchitecture.sln”

Obrigatório

Determina o path completo do arquivo de solução. É com base nele que seus projetos serão identificados.

3) /convertSolutionProjectsInNugetReferences

Opcional

Referências de projetos são consideradas referências nuget com a mesma versão do seu projeto.

<dependencies>
	<dependency id="Common.Logging" version="2.2.0" />
	<dependency id="Common.Logging.Core" version="2.2.0" />
	<dependency id="Microsoft.AspNet.Cors" version="5.1.2" />
	<dependency id="Microsoft.AspNet.SignalR.Core" version="2.0.3" />
	<dependency id="Microsoft.AspNet.SignalR.SelfHost" version="2.0.3" />
	<dependency id="Microsoft.AspNet.WebApi.Client" version="5.1.2" />
	<dependency id="Microsoft.AspNet.WebApi.Core" version="5.1.2" />
	<dependency id="Microsoft.AspNet.WebApi.Owin" version="5.1.2" />
	<dependency id="Microsoft.Owin" version="3.0.0-beta1" />
	<dependency id="Microsoft.Owin.Cors" version="3.0.0-beta1" />
	<dependency id="Microsoft.Owin.Diagnostics" version="3.0.0-beta1" />
	<dependency id="Microsoft.Owin.Host.HttpListener" version="3.0.0-beta1" />
	<dependency id="Microsoft.Owin.Hosting" version="3.0.0-beta1" />
	<dependency id="Microsoft.Owin.Security" version="3.0.0-beta1" />
	<dependency id="Microsoft.Owin.SelfHost" version="3.0.0-beta1" />
	<dependency id="Newtonsoft.Json" version="6.0.3" />
	<dependency id="Oragon.Architecture.Bootstrap" version="7.0.0-alpha1" />
	<dependency id="Oragon.Architecture.External.db4o" version="7.0.0-alpha1" />
	<dependency id="Oragon.Architecture.ExtJS" version="7.0.0-alpha1" />
	<dependency id="Oragon.Architecture.Icons" version="7.0.0-alpha1" />
	<dependency id="Owin" version="1.0" />
	<dependency id="Spring.Core" version="2.0.0-RC1" />
	<dependency id="Spring.Services" version="2.0.0-RC1" />
	<dependency id="Topshelf" version="3.1.3" />
	<dependency id="Oragon.Architecture.ApplicationHosting" version="$version$" />
	<dependency id="Oragon.Architecture.Serialization" version="$version$" />
	<dependency id="Oragon.Architecture.Services.SpringFramework" version="$version$" />
	<dependency id="Oragon.Architecture.Services" version="$version$" />
	<dependency id="Oragon.Architecture.Web.Owin.OMvc" version="$version$" />
	<dependency id="Oragon.Architecture.Web.SignalR.SpringFramework" version="$version$" />
	<dependency id="Oragon.Architecture" version="$version$" />
</dependencies>

4) /createNuspecIfNeed=”.nuget\NuGet.exe”

Se seu projeto ainda não contém um nuspec file, um será criado na pasta “PROPERTIES” de seu projeto.

O endereço do nuget.exe deve ser relativo ao endereço da solução.

Não se preocupe, O executável tanta achar seu arquivo nuspec do projeto dentro da pasta do projeto e dentro da pasta properties do projeto. Com qualquer nome. Se existir somente 1 arquivo, automaticamente assumo que esse é o nuspec do projeto, independente de suas configurações e nomes.

Quando um projeto não possui um arquivo nuspec e esse é criado (usando o parâmetro /createNuspecIfNeed), o arquivo nuspec será criado com o mesmo texto do AssemblieName definido no projeto (Project/PropertyGroup/AssemblyName). Esse mesmo nome será usado como ID e Title. E pode ser mudado a qualquer momento. Essas propriedades não são gerenciadas, apenas criadas quando não existe nuspec para o projeto.

4) /debug

Ao iniciar a execução, um prompt do visual studio será aberto para que você possa realizar o debug. Semelhante à janela de erro não gerenciado, quando executamos apps fora do ambiente de debug.

Informações adicionais

  • O merge será realizado com base nas referências de seu projeto e nas referências explícitas no packages.config.
  • Ao optar por usar o parâmetro “/convertSolutionProjectsInNugetReferences”, as referências de outros projetos da mesma solução serão marcados como nuget references (como exemplo, as linhas em vermelho do passo 2)
  • Ao optar por usar o parâmetro “/createNuspecIfNeed”, será criado um pacote padrão, com algumas automações como:
  • Seu arquivo NUSPEC antigo não é comprometido. Apenas as dependências são recriadas (com base no packages.config e dependendo do parâmetro /convertSolutionProjectsInNugetReferences também das referências do projeto). Demais atributos, valores e propriedades não são gerenciados.

Restrições

  • Testado com soluções baseadas no Visual Studio 2013 (acredito que funcione em soluções do VS2010 e VS2012 também).
  • Suporta apenas arquivo de projeto CSPROJ
  • Suporta NUSPEC 2011/08.

O projeto é bem simples, mas ajuda bastante. Principalmente porque senti muita falta dessas features nativas no nuget.

Depois eu falo de integração contínua com jenkins, gerando pacotes e publicando-os! Esse assunto também é muito interessante

Uma parte do que você precisa saber sobre o Microsoft vNext

Uma parte do que você precisa saber sobre o Microsoft vNext

[EDITADO]

Olá, como vai você? Espero que esteja tão excitado com as novidades da Microsoft quanto eu, mas se não estiver, vou tentar mostrar um pouquinho da revolução que estamos vivendo em nossa plataforma.

Nessa semana rolou o TechEd North America 2014 e nele muita coisa legal foi apresentada. Aqui faço um compilado da história da plataforma e dos posts mais interessantes, da própria galera da Microsoft e da galera que esteve por lá conferindo as sessões!

Não perca!

(mais…)