Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Plataforma Universal do Windows (UWP) fornece uma plataforma de aplicativo comum para cada dispositivo executado Windows 10. Nesse modelo, os aplicativos UWP podem chamar as APIs do WinRT que são comuns a todos os dispositivos e também APIs (incluindo Win32 e .NET) específicas para a família de dispositivos na qual o aplicativo está em execução.
Neste passo a passo, você cria um pacote NuGet com um componente UWP nativo (incluindo um controle XAML) que pode ser usado em projetos gerenciados e nativos.
Pré-requisitos
Visual Studio 2017 ou Visual Studio 2015. Instale a edição community 2017 gratuitamente do visualstudio.com; você também pode usar as edições Professional e Enterprise.
CLI do NuGet. Baixe a versão mais recente do
nuget.exea partir de nuget.org/downloads, salvando-a em um local de sua escolha (o download é o.exediretamente). Em seguida, adicione esse local à variável de ambiente PATH se ainda não estiver.
Criar um componente de Windows Runtime UWP
Em Visual Studio, escolha Arquivo > Novo > Projeto, expanda o nó Visual C++ > Windows > Universal, selecione o modelo Componente de Tempo de Execução do Windows (Universal Windows), altere o nome para ImageEnhancer e clique em OK. Aceite os valores padrão para a versão de destino e a versão mínima quando solicitado.
Clique com o botão direito do mouse no projeto no Gerenciador de Soluções, selecione Adicionar > Novo Item, e clique no nó Visual C++ > XAML, selecione Templated Control, altere o nome para AwesomeImageControl.cpp e clique em Adicionar:
Clique com o botão direito do mouse no projeto no Gerenciador de Soluções e selecione Properties. Na página Propriedades, expanda Configuration Properties > C/C++ e clique em Output Files. No painel à direita, altere o valor para Gerar Arquivos de Documentação XML para Sim:
Clique com o botão direito do mouse na solução agora, selecione Compilação em Lote, marque as três caixas de depuração na caixa de diálogo, conforme mostrado abaixo. Isso garante que, quando você fizer uma compilação, gere um conjunto completo de artefatos para cada um dos sistemas de destino que Windows dá suporte.
Na caixa de diálogo Compilação do Lote, clique em Compilar para verificar o projeto e criar os arquivos de saída necessários para o pacote NuGet.
Observação
Neste passo a passo, você usa os artefatos de depuração para o pacote. Para o pacote sem depuração, em vez disso, verifique as opções de liberação na caixa de diálogo Batch Build e consulte as pastas de liberação resultantes nas etapas a seguir.
Criar e atualizar o arquivo .nuspec
Para criar o arquivo inicial .nuspec , siga as três etapas abaixo. As seções a seguir orientam você por outras atualizações necessárias.
Abra um prompt de comando e navegue até a pasta que contém
ImageEnhancer.vcxproj(essa será uma subpasta abaixo da qual o arquivo da solução está).Execute o comando NuGet
specpara gerarImageEnhancer.nuspec(o nome do arquivo é retirado do nome do.vcxproj):nuget specAbra
ImageEnhancer.nuspecem um editor e atualize-o para corresponder ao seguinte, substituindo YOUR_NAME por um valor apropriado. O<id>valor, especificamente, deve ser exclusivo em nuget.org (consulte as convenções de nomenclatura descritas na criação de um pacote). Observe que você deve atualizar as tags de autor e descrição ou receberá um erro durante o processo de empacotamento.<?xml version="1.0"?> <package > <metadata> <id>ImageEnhancer.YOUR_NAME</id> <version>1.0.0</version> <title>ImageEnhancer</title> <authors>YOUR_NAME</authors> <owners>YOUR_NAME</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Awesome Image Enhancer</description> <releaseNotes>First release</releaseNotes> <copyright>Copyright 2016</copyright> <tags>image enhancer imageenhancer</tags> </metadata> </package>
Observação
Para pacotes criados para consumo público, preste atenção especial ao elemento <tags>, pois essas tags ajudam outras pessoas a encontrar seu pacote e entender o que ele faz.
Adicionando metadados Windows ao pacote
Um componente Windows Runtime requer metadados que descrevem todos os seus tipos disponíveis publicamente, o que possibilita que outros aplicativos e bibliotecas consumam o componente. Esses metadados estão contidos em um arquivo .winmd, que é criado quando você compila o projeto e deve ser incluído no pacote NuGet. Um arquivo XML com dados do IntelliSense também é criado ao mesmo tempo e também deve ser incluído.
Adicione o nó <files> ao arquivo .nuspec.
<package>
<metadata>
...
</metadata>
<files>
<!-- WinMd and IntelliSense files -->
<file src="..\Debug\ImageEnhancer\ImageEnhancer.winmd" target="lib\uap10.0"/>
<file src="..\Debug\ImageEnhancer\ImageEnhancer.xml" target="lib\uap10.0"/>
</files>
</package>
Adicionando conteúdo XAML
Para incluir um controle XAML com seu componente, você precisa adicionar o arquivo XAML que tem o modelo padrão para o controle (conforme gerado pelo modelo de projeto). Isso também está na <files> seção:
<?xml version="1.0"?>
<package >
<metadata>
...
</metadata>
<files>
...
<!-- XAML controls -->
<file src="Themes\Generic.xaml" target="lib\uap10.0\Themes"/>
</files>
</package>
Adicionando as bibliotecas de implementação nativas
Dentro do seu componente, a lógica principal do tipo ImageEnhancer está no código nativo, que está contido nos vários ImageEnhancer.dll assemblies gerados para cada ambiente de execução de destino (ARM, x86 e x64). Para incluí-los no pacote, faça referência a eles na seção <files> junto com seus arquivos de recursos .pri associados.
<?xml version="1.0"?>
<package >
<metadata>
...
</metadata>
<files>
...
<!-- DLLs and resources -->
<file src="..\ARM\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-arm\native"/>
<file src="..\ARM\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-arm\native"/>
<file src="..\ARM64\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-arm64\native"/>
<file src="..\ARM64\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-arm64\native"/>
<file src="..\x64\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-x64\native"/>
<file src="..\x64\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-x64\native"/>
<file src="..\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-x86\native"/>
<file src="..\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-x86\native"/>
</files>
</package>
Adicionando .targets
Em seguida, projetos C++ e JavaScript que podem consumir seu pacote NuGet precisam de um arquivo .targets para identificar os arquivos de assembly e winmd necessários. (Projetos C# e Visual Basic fazem isso automaticamente.) Crie esse arquivo copiando o texto abaixo para ImageEnhancer.targets e salve-o na mesma pasta que o arquivo .nuspec.
Observação: esse .targets arquivo precisa ser o mesmo nome da ID do pacote (por exemplo, o <Id> elemento no .nupspec arquivo):
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ImageEnhancer-Platform Condition="'$(Platform)' == 'Win32'">x86</ImageEnhancer-Platform>
<ImageEnhancer-Platform Condition="'$(Platform)' != 'Win32'">$(Platform)</ImageEnhancer-Platform>
</PropertyGroup>
<ItemGroup Condition="'$(TargetPlatformIdentifier)' == 'UAP'">
<Reference Include="$(MSBuildThisFileDirectory)..\..\lib\uap10.0\ImageEnhancer.winmd">
<Implementation>ImageEnhancer.dll</Implementation>
</Reference>
<ReferenceCopyLocalPaths Include="$(MSBuildThisFileDirectory)..\..\runtimes\win10-$(ImageEnhancer-Platform)\native\ImageEnhancer.dll" />
</ItemGroup>
</Project>
Em seguida, consulte o arquivo .nuspec em ImageEnhancer.targets:
<?xml version="1.0"?>
<package >
<metadata>
...
</metadata>
<files>
...
<!-- .targets -->
<file src="ImageEnhancer.targets" target="build\native"/>
</files>
</package>
.nuspec final
Seu arquivo final .nuspec agora deve ser semelhante ao seguinte, em que novamente YOUR_NAME deve ser substituído por um valor apropriado:
<?xml version="1.0"?>
<package >
<metadata>
<id>ImageEnhancer.YOUR_NAME</id>
<version>1.0.0</version>
<title>ImageEnhancer</title>
<authors>YOUR_NAME</authors>
<owners>YOUR_NAME</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Awesome Image Enhancer</description>
<releaseNotes>First Release</releaseNotes>
<copyright>Copyright 2016</copyright>
<tags>image enhancer imageenhancer</tags>
</metadata>
<files>
<!-- WinMd and IntelliSense -->
<file src="..\Debug\ImageEnhancer\ImageEnhancer.winmd" target="lib\uap10.0"/>
<file src="..\Debug\ImageEnhancer\ImageEnhancer.xml" target="lib\uap10.0"/>
<!-- XAML controls -->
<file src="Themes\Generic.xaml" target="lib\uap10.0\Themes"/>
<!-- DLLs and resources -->
<file src="..\ARM\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-arm\native"/>
<file src="..\ARM\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-arm\native"/>
<file src="..\ARM64\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-arm64\native"/>
<file src="..\ARM64\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-arm64\native"/>
<file src="..\x64\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-x64\native"/>
<file src="..\x64\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-x64\native"/>
<file src="..\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-x86\native"/>
<file src="..\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-x86\native"/>
<!-- .targets -->
<file src="ImageEnhancer.targets" target="build\native"/>
</files>
</package>
Embalar o componente
Com a referência completa .nuspec de todos os arquivos que você precisa incluir no pacote, você está pronto para executar o pack comando:
nuget pack ImageEnhancer.nuspec
Isso gera ImageEnhancer.YOUR_NAME.1.0.0.nupkg. Abrindo esse arquivo em uma ferramenta como o Gerenciador de Pacotes NuGet e expandindo todos os nós, você verá o seguinte conteúdo:
Dica
Um .nupkg arquivo é apenas um arquivo ZIP com uma extensão diferente. Você também pode examinar o conteúdo do pacote, alterando .nupkg para .zip, mas lembre-se de restaurar a extensão antes de carregar um pacote para nuget.org.
Para disponibilizar seu pacote para outros desenvolvedores, siga as instruções em Publicar um pacote.