.NETConf 2017 – Override IT Community – Anunciando o .NET Standard 2.0 – Clovis Coli Jr
A especificação do .NET Standard 2.0 está agora completa. É suportado no .NET Core 2.0 , no .NET Framework 4.6.1 e versões posteriores e no Visual Studio 15.3 .
O .NET Standard é para o compartilhamento de código . O .NET Standard é um conjunto de APIs que todas as implementações .NET devem fornecer de acordo com o padrão. Isso une as implementações .NET e evita a fragmentação futura. Ele substitui Portable Class Libraries (PCLs) como a ferramenta para criar bibliotecas .NET que funcionam em todos os lugares.
Superfície de API muito maior : nós mais do que duplicamos o conjunto de APIs disponíveis de 13k no .NET Standard 1.6 a 32k no .NET Standard 2.0 . A maioria delas são as API's existentes do .NET Framework. Essas adições tornam muito mais fácil a porta do código existente para o .NET Standard e, por extensão, para qualquer implementação .NET do .NET Standard, como o .NET Core 2.0 e a próxima versão do UWP.
Modo de compatibilidade do .NET Framework : a grande maioria dos pacotes NuGet atualmente ainda está segmentando o .NET Framework. Muitos projetos atualmente estão bloqueados de mover-se para o .NET Standard porque nem todas as suas dependências ainda estão direcionadas ao .NET Standard. É por isso que foi adicionado um modo de compatibilidade que permite que os projetos .NET Standard façam referência às bibliotecas do .NET Framework. Embora isso possa não funcionar em todos os casos (por exemplo, se os binários do .NET Framework usam o WPF), descobrimos que 70% de todos os pacotes NuGet no nuget.org são compatíveis com o .NET Standard 2.0. Então, na prática, desbloqueia muitos projetos.
Suporte de plataforma ampla . O .NET Standard 2.0 é suportado nas seguintes plataformas :
Próxima versão do UWP (que deverá ser embarque no final deste ano)
Criando uma biblioteca .NET Standard
Vamos ver o .NET Standard 2.0 em ação criando um novo projeto. Você pode fazer isso no Visual Studio invocando Arquivo | Novo Projeto . Escolha Class Library (.NET Standard) da categoria .NET Standard :
A partir da linha de comando, você pode usar para criar uma nova biblioteca (que, por padrão, está segmentando o .NET Standard): dotnet new
[plain] $ dotnet new lib -o mylibrary
Para tornar esta biblioteca um pouco mais interessante. Edite o arquivo da seguinte maneira: Class1.cs
Consumindo uma biblioteca .NET Standard
Antes de consumir a biblioteca, precisamos criar um projeto. Vamos criar um aplicativo vazio ASP.NET Core. No Visual Studio, crie um novo projeto e escolha ASP.NET Core Web Application da categoria .NET Core . Em seguida, escolha Vazio e verifique se ASP.NET Core 2.0 está selecionado:
Na linha de comando, você pode simplesmente usar novamente: dotnet new
[plain] dotnet new web -o aspnetcore
Consumir uma biblioteca .NET Standard funciona da mesma forma que qualquer outro projeto de biblioteca: basta referenciá-lo. No Visual Studio, clique com o botão direito do mouse em seu projeto da web e clique em Adicionar | Reference … . Em seguida, escolha mylibrary na guia Projetos .
Na linha de comando, você pode usar : dotnet add
[plain] $ dotnet add reference ../mylibrary/mylibrary.csproj
Agora, edite o arquivo e altere a invocação do método da seguinte maneira: Startup.cs Run
[csharp] app.Run ( async (context) =>
aguarde context.Response.WriteAsync(mensagem);
Para iniciar a aplicação web, você pode simplesmente pressionar F5 no Visual Studio. Na linha de comando, use: dotnet run
[plain] $ dotnet run
Para ver o site, abra um navegador e navegue até o URL impresso:
Parabéns! Sua biblioteca .NET Standard 2.0 agora está sendo executada no .NET Core. Você também pode usá-lo a partir do .NET Framework ou um aplicativo Xamarin e a experiência seria muito semelhante.
Reutilizando uma biblioteca .NET Framework existente
Agora vamos adicionar uma referência a um pacote NuGet que não almeja o .NET Standard ainda, Huitian.PowerCollections . No Visual Studio, clique com o botão direito do mouse no projeto mylibrary e escolha Gerenciar pacotes NuGet . Em seguida, selecione Procurar e procure Huitian.PowerCollections . Clique em Instalar .
Como usuário de linha de comando, você pode conseguir o mesmo usando : dotnet add package
[plain] $ dotnet add package Huitian.PowerCollections
O seguinte aviso é exibido depois de instalar o pacote:
NU1701: O pacote 'Huitian.PowerCollections 1.0.0' foi restaurado usando '.NETFramework, Version = v4.6.1' em vez da estrutura de destino do projeto '.NETStandard, Version = v2.0'. Este pacote pode não ser totalmente compatível com o seu projeto.
Este aviso não aparece apenas ao instalar o pacote, mas toda vez que você constrói. Isso garante que você não o ignore acidentalmente.
A razão para o aviso é que o NuGet não tem como saber se a biblioteca do .NET Framework realmente funcionará. Por exemplo, pode depender do Windows Forms. Para garantir que você não perca seu tempo solucionando problemas que não podem funcionar, a NuGet permite que você saiba que você está potencialmente deslizando dos trilhos. Claro, os avisos que você tem que ignorar são irritantes. Assim, recomendamos que você teste sua aplicação / biblioteca e, se você achar que tudo está funcionando como esperado, você pode suprimir o aviso.
Se você estiver usando a linha de comando, edite seu arquivo de projeto e adicione o atributo no qual deseja suprimir o aviso. O valor para o atributo é uma lista separada por vírgulas de todas as IDs de aviso. No nosso caso, é apenas um único, a saber : NoWarn PackageReference NU1701
[xml] <ItemGroup>
<PackageReference Include="Huitian.PowerCollections" Version="1.0.0" NoWarn="NU1701"/>
No Visual Studio, clique com o botão direito do mouse na referência do pacote em que deseja suprimir o aviso no Solution Explorer e selecione Propriedades . Defina a propriedade NoWarn como no exemplo a seguir. NU1701
Construir o projeto agora mostrará zero avisos. Observe que a supressão não é global, mas específica para cada referência de pacote. Isso garante que apenas usar uma biblioteca através do modo de compatibilidade não resulte em um passeio gratuito para todas as futuras referências. Então, se você instalar outra biblioteca que precisa do modo de compatibilidade, você receberá o aviso novamente e você também precisará suprimir esse pacote.
Produzindo um pacote NuGet
Quando a sua biblioteca estiver pronta, você pode produzir um pacote NuGet para isso e publicá-lo (eu suponho que esse é nosso objetivo). Para fazer isso no Visual Studio, clique com o botão direito do mouse em seu projeto e selecione Propriedades . Na guia Pacote , marque a caixa para criar o pacote NuGet na compilação:
Se você estiver usando a linha de comando, edite o arquivo do projeto e adicione a propriedade com um valor de : GeneratePackageOnBuild true
[xml] <PropertyGroup>
Quando você reconstruir seu projeto, você também encontrará um pacote NuGet no diretório de saída.
E quanto às bibliotecas de classe portátil?
Se você estiver compartilhando código entre diferentes implementações do .NET hoje, provavelmente você está ciente das Bibliotecas de Classe Portátil (PCLs). Com o lançamento do .NET Standard 2.0, agora estamos oficialmente desaprovando PCLs e você deve mover seus projetos para .NET Standard:
O .NET Standard 2.0 dobrou as APIs desde o .NET Standard 1.x, o que significa que agora é muito mais fácil enviar o código existente do .NET Framework para o .NET Standard. Ele também adiciona um modo de compatibilidade para referenciar binários do .NET Framework existentes do .NET Standard. Isso permite que você comece, embora nem todas as suas dependências tenham navegado para o .NET Standard ainda.
Praticamente todas as implementações .NET têm suporte para .NET Standard 2.0, incluindo .NET Framework, .NET Core e Xamarin. O suporte da UWP virá no final deste ano. Todas essas implementações se beneficiam das APIs adicionadas e do modo de compatibilidade, especialmente do .NET Core e UWP, que costumava ter um conjunto de API muito mais limitado.
Você está criando aplicativos? Em seguida, recomendamos que você converta sua lógica de negócios e código independente da UI para o .NET Standard. Isso garante, não importa onde sua empresa precisa vá – desktop, celular ou nuvem – seu código pode ir junto.
Você está criando pacotes NuGet? Em seguida, mude para o .NET Standard 2.0. Você obtém muitas API sem comprometer o alcance. E seus consumidores vão adorar também!