Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Plataforma Universal do Windows (UWP) fornece uma plataforma de aplicação comum para todos os dispositivos que executam Windows 10. Neste modelo, as aplicações UWP podem chamar tanto as APIs WinRT comuns a todos os dispositivos, como APIs (incluindo Win32 e .NET) específicas da família de dispositivos onde a aplicação está a correr.
Neste walkthrough, cria um pacote NuGet com um componente UWP nativo (incluindo um controlo XAML) que pode ser usado tanto em projetos Geridos como Nativos.
Pré-requisitos
Visual Studio 2017 ou Visual Studio 2015. Instale gratuitamente a edição Comunidade de 2017 pela visualstudio.com; também podes usar as edições Professional e Enterprise.
NuGet CLI. Descarregue a versão mais recente do
nuget.exede nuget.org/downloads, guardando-a num local à sua escolha (o download é o próprio.exe). Depois adiciona essa localização à variável de ambiente PATH, caso ainda não esteja.
Criar um componente UWP Windows Runtime
No Visual Studio, escolha Ficheiro > Novo > Projeto, expanda o nó Visual C++ > Windows > Universal, selecione o modelo Componente Windows Runtime (Universal Windows), mude o nome para ImageEnhancer e clique OK. Aceite os valores padrão para Versão Alvo e Versão Mínima quando solicitado.
Clique com o botão direito no projeto em Explorador de Soluções, selecione Adicionar > Novo Item, clique no nó Visual C++ > XAML, selecione Controlo Com Modelo, altere o nome para AwesomeImageControl.cpp e clique em Adicionar:
Clique com o botão direito no projeto em Explorador de Soluções e selecione Properties. Na página de Propriedades, expanda Configuration Properties > C/C++ e clique em Output Files. No painel à direita, altere o valor de Generar Ficheiros de Documentação XML para Sim:
Clique com o botão direito na solução agora, selecione Batch Build, assinale as três caixas de Depuração no diálogo, conforme mostrado abaixo. Isto garante que, ao fazer uma build, gera um conjunto completo de artefactos para cada um dos sistemas alvo que o Windows suporta.
No diálogo Batch Build, clique em Construir para verificar o projeto e criar os ficheiros de saída que precisa para o pacote NuGet.
Observação
Neste walkthrough, usas os artefactos de Debug para o pacote. Para pacotes que não sejam de depuração, verifique as opções de Lançamento na caixa de diálogo Batch Build e consulte as pastas de Lançamento resultantes nos passos seguintes.
Crie e atualize o ficheiro .nuspec
Para criar o ficheiro inicial .nuspec , faça os três passos abaixo. As secções seguintes guiam-no então por outras atualizações necessárias.
Abra um prompt de comandos e navegue até à pasta que contém
ImageEnhancer.vcxproj(esta será uma subpasta abaixo de onde está o ficheiro de solução).Execute o comando NuGet
specpara gerarImageEnhancer.nuspec(o nome do ficheiro é retirado do nome do.vcxprojficheiro):nuget specAbrir
ImageEnhancer.nuspecnum editor e atualizá-lo para corresponder ao seguinte, substituindo-YOUR_NAME por um valor apropriado. O<id>valor, especificamente, deve ser único entre nuget.org (ver as convenções de nomenclatura descritas em Criar um pacote). Note também que deve atualizar as etiquetas do autor e da descrição, caso contrário terá um erro durante a etapa de embalagem.<?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 construídos para consumo público, preste especial atenção ao <tags> elemento, pois estas etiquetas ajudam os outros a encontrar o seu pacote e a perceber o que ele faz.
Adicionar metadados do Windows ao pacote
Um Componente Windows Runtime requer metadados que descrevam todos os seus tipos publicamente disponíveis, o que permite que outras aplicações e bibliotecas consumam o componente. Estes metadados estão contidos num ficheiro .winmd, que é criado quando compilas o projeto e deve ser incluído no teu pacote NuGet. Um ficheiro XML com dados IntelliSense também é construído ao mesmo tempo, e deve ser incluído também.
Adicione o seguinte <files> nó ao .nuspec ficheiro:
<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>
Adição de conteúdo XAML
Para incluir um controlo XAML com o seu componente, precisa de adicionar o ficheiro XAML que tem o modelo padrão do controlo (tal como gerado pelo modelo do projeto). Isto também se aplica à <files> secção:
<?xml version="1.0"?>
<package >
<metadata>
...
</metadata>
<files>
...
<!-- XAML controls -->
<file src="Themes\Generic.xaml" target="lib\uap10.0\Themes"/>
</files>
</package>
Adição das bibliotecas nativas de implementação
Dentro do seu componente, a lógica central do tipo ImageEnhancer está em código escrito em linguagem nativa, que está contido nas várias ImageEnhancer.dll assemblagens geradas para cada runtime de destino (ARM, x86 e x64). Para incluir estes no pacote, referencia-os na <files> secção juntamente com os seus ficheiros 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>
Adição de .targets
De seguida, projetos em C++ e JavaScript que possam consumir o seu pacote NuGet precisam de um ficheiro .targets para identificar os ficheiros assembly e winmd necessários. (Projetos em C# e Visual Basic fazem isto automaticamente.) Crie este ficheiro copiando o texto abaixo para ImageEnhancer.targets e guardando-o na mesma pasta que o ficheiro .nuspec.
Nota: Este .targets ficheiro precisa de ter o mesmo nome do ID do pacote (por exemplo, o <Id> elemento no .nupspec ficheiro):
<?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>
Depois, consulte ImageEnhancer.targets no seu .nuspec ficheiro:
<?xml version="1.0"?>
<package >
<metadata>
...
</metadata>
<files>
...
<!-- .targets -->
<file src="ImageEnhancer.targets" target="build\native"/>
</files>
</package>
.nuspec final
O seu ficheiro final .nuspec deve agora parecer o seguinte, onde, 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>
Empacotar o componente
Com a referência completa .nuspec de todos os ficheiros que precisa de incluir no pacote, pode agora executar o comando pack.
nuget pack ImageEnhancer.nuspec
Isto gera ImageEnhancer.YOUR_NAME.1.0.0.nupkg. Ao abrir este ficheiro numa ferramenta como o NuGet Package Explorer e ao expandir todos os nós, verá o seguinte conteúdo:
Sugestão
Um .nupkg ficheiro é apenas um ficheiro ZIP com uma extensão diferente. 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 o seu pacote a outros programadores, siga as instruções em Publicar um pacote.