Como Criar um Pacote NuGet com Referências a Outros Projetos na Mesma Solução
Introdução
Olá, devs! No mundo do desenvolvimento de software, compartilhar código de forma eficiente é fundamental para a produtividade e manutenção de projetos.
Um dos métodos mais populares para isso é através de pacotes NuGet.
Neste post, vamos explorar como criar um pacote NuGet que inclui referências a outros projetos dentro da mesma solução, garantindo que você consiga distribuir suas bibliotecas de maneira eficaz e organizada.
Bora?
Entendendo o Cenário
Imagine que você está trabalhando em uma solução que contém múltiplos projetos. Um desses projetos depende diretamente de outro dentro da mesma solução.
Para facilitar o gerenciamento e a distribuição, você decide criar um pacote NuGet.
No entanto, ao empacotar seu projeto, você percebe que precisa incluir as referências corretas para que tudo funcione quando o pacote for utilizado em outra solução.
Como fazer isso?
Passo a Passo para Criar o Pacote NuGet
Configuração do Projeto
Primeiro, certifique-se de que todos os projetos na sua solução estão configurados corretamente. Cada projeto deve ter um arquivo .csproj bem definido, com todas as dependências e referências adicionadas.
Modificações no arquivo .csproj
Para incluir referências a outros projetos na mesma solução e garantir que o pacote NuGet seja gerado corretamente, precisamos fazer algumas modificações no arquivo .csproj do projeto principal.
Adicione o seguinte trecho dentro do elemento <PropertyGroup>:
<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
Em seguida, adicione a referência ao projeto dependente com as propriedades necessárias para incluir o assembly de saída:
<ItemGroup>
<ProjectReference Include="..\DependencyProject\DependencyProject.csproj">
<ReferenceOutputAssembly>true</ReferenceOutputAssembly>
<IncludeAssets>DependencyProject.dll</IncludeAssets>
</ProjectReference>
</ItemGroup>
Por último, inclua o seguinte alvo dentro das tags <Project>:
<Target DependsOnTargets="ResolveReferences" Name="CopyProjectReferencesToPackage">
<ItemGroup>
<BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))"/>
</ItemGroup>
</Target>
Exemplo Completo de Arquivo .csproj
Aqui está um exemplo completo de um arquivo .csproj configurado para incluir referências a outros projetos e pronto para empacotamento:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.0.0</Version>
<Product>MyProduct</Product>
<PackageId>MyProduct</PackageId>
<Authors>YourName</Authors>
<Company>CompanyName</Company>
<Description>Descrição do meu pacote</Description>
<Copyright>Copyright © 2024 MyCompany</Copyright>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SomeNugetPackage" Version="1.2.3"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DependencyProject\DependencyProject.csproj">
<ReferenceOutputAssembly>true</ReferenceOutputAssembly>
<IncludeAssets>DependencyProject.dll</IncludeAssets>
</ProjectReference>
</ItemGroup>
<Target DependsOnTargets="ResolveReferences" Name="CopyProjectReferencesToPackage">
<ItemGroup>
<BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))"/>
</ItemGroup>
</Target>
</Project>
Adicionando uma DLL Externa
Ok, agora que já aprendemos a adicionar DLLs que estão na mesma solução, como seria adicionar somente uma DLL externa que não é um projeto?
Você pode usar o seguinte trecho de código no seu arquivo .csproj:
<ItemGroup>
<Content Include="<path to other dll>">
<Pack>true</Pack>
<PackagePath>lib\$(TargetFramework)</PackagePath>
</Content>
</ItemGroup>
Este código assegura que a DLL externa será incluída no pacote NuGet, tornando-a disponível para qualquer projeto que consumir o pacote.
Conclusão e Dicas Finais
Criar um pacote NuGet com referências a outros projetos na mesma solução pode parecer complicado à primeira vista, mas com a configuração correta, o processo se torna bem mais simples. Lembre-se de sempre verificar se todas as dependências estão devidamente incluídas e testadas.
Espero que este guia tenha sido útil e que você esteja pronto para criar seus próprios pacotes NuGet com múltiplas dependências
E aí, o que achou? Gostou?
Até!