image

Saiu durante o Build o SDK 2.3 do Azure. Eu atualizei as dependências de um projeto em que estava trabalhando para essa versão utiliznado Nuget, atualizei o servidor de build e tudo fucionou, build acontecendo normalmente e testes passando. Até que eu montei um outro servidor de build e o build falhou. Porque?

Porque o Visual Studio não atualiza um projeto de cloud services automaticamente para a versão 2.3. Um projeto web, ASP.NET, não vai sofrer com isso. Já um projeto cloud services sabe com qual versão está trabalhando:

Versão 2.3 do Azure SDK

Por esse motivo o novo servidor de build, que tinha só a versão 2.3 instalada, mas não a anterior (2.2), falhou ao tentar fazer a compilação – ele não encontrou as dependências.

Para atualizar tive que alterar na mão o projeto (arquivo ccproj), definições do serviço e configurações, assim como atualizar as dependências (via nuget). Aqui um resumo do que fiz, caso vocês precisem:

Arquivo de projeto (.ccproj):

  • Alterar elemento: <ProductVersion>2.3</ProductVersion>
  • Alterar elemento: <CloudExtensionsDir Condition=” ‘$(CloudExtensionsDir)’ == ” “>$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Windows Azure Tools\2.3\</CloudExtensionsDir>

Arquivo de definição (csdef):

  • Alterar elemento: <ServiceDefinition name=”Some.CloudService” xmlns=”http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition” schemaVersion=”2014-01.2.3″>

Arquivos de configuração (.cscfg):

  • Alterar elemento: <ServiceConfiguration serviceName=”Some.CloudService” xmlns=http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration osFamily=”4″ osVersion=”*” schemaVersion=”2014-01.2.3″>

Arquivos de .config que utilizem o DiagnosticMonitorTraceListener:

  • <add type=”Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ name=”AzureDiagnostics”>

Atualizei também os seguintes pacotes do Nuget:

  • WindowsAzure.Storage, para versão 3.1.0.1 (maior ou igual a 3), e dependências.
  • Microsoft.WindowsAzure.ConfigurationManager, para versão 2.0.3 (maior ou igual a 2).

E as seguintes dependências diretas:

  • Microsoft.WindowsAzure.Diagnostics (fica em C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.3\ref\Microsoft.WindowsAzure.Diagnostics.dll)

Uma coisa que dá muito problema é que às vezes há binding redirects nos arquivos de configuração que não atualizam corretamente. Parecem com isso:

<dependentassembly>
  <assemblyidentity name="Microsoft.Data.OData" publickeytoken="31bf3856ad364e35" culture="neutral" />
  <bindingredirect oldversion="0.0.0.0-5.6.0.0" newversion="5.6.0.0" />
</dependentassembly>

Se você tiver um erro ao carregar alguma dependência fique atento se todas as configurações de binding redirect estão corretas, olhe específicamente para as versões, se batem com as referências do projeto.

Feito isso o projeto já está na versão 2.3. Não precisei alterar nenhuma linha de código C#. O ideal seria que essa evolução fosse mais simples, mas já que não é, fica aqui o roteiro para quem quiser fazer.

Giovanni Bassi

Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.