Comecei lendo esta pergunta sugerida semelhante à minha, mas não havia solução: por que o MSTest.TestAdapter adiciona suas DLLs ao meu pacote NuGet?
Descrição Rápida do Problema
Eu escrevi um pacote NuGet, e cada vez que eu instalá-lo, NUnite NUnit3TestAdapter .dll's ser adicionados ao projeto que eu instalado. Quero encontrar uma solução que resolva esse problema.
Etapas de reprodução
Enviei dois repositórios git que reproduzem o problema que estou descrevendo.
ClientLibrary/ MainFramework(projeto a partir do qual eu gerei o pacote NuGet) - https://github.com/harbourc/client-library-repro-nuget-issue
TargetProject(projeto em que o pacote deve ser instalado) - https://github.com/harbourc/target-project-repro-nuget-issue
Você pode clonar os dois repositórios, restaurar os pacotes NuGet e reproduzir o problema da seguinte maneira:
Localize ClientLibrary.1.0.0.nupkg em client-library-repro-nuget-issue / ClientLibrary /
Abra o console do gerenciador de pacotes para o target-project-repro-nuget-issue e execute
Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
- Observe os
NUniteNUnit3TestAdapter.dlladicionadosTargetProject, emboraTargetProjectjá os tenha instaladoNUniteNUnit3TestAdapterinstalado.
Visão geral mais longa
Criei meu próprio pacote NuGet para uso interno, chamado ClientLibrary, e estou tentando instalá-lo em outro projeto, chamado TargetProject. Aqui está um rápido detalhamento da estrutura:
FullSolution.slnMainFramework.csprojClientLibrary.csproj->.nupkggerado a partir disso
Projeto separado:
TargetProject.slnTargetProject.csproj-> instalar.nupkgneste
ClientLibrarytem uma referência MainFrameworke usa muitos métodos de MainFramework.
Ao instalar ClientLibrary.1.0.0.nupkgno TargetProject, os seguintes .dllitens são adicionados a TargetProject:
nunit.engine.api.dll
nunit.engine.dll
NUnit3.TestAdapter.dll
NUnit3.TestAdapter.pdb
Se eu excluir esses .dllitens, tudo funcionará bem, porque TargetProjectesses pacotes já estão instalados de qualquer maneira. Eles não são necessários, é apenas irritante ter que excluí-los durante a instalação.
Aqui está como estou adicionando o ClientLibrarypacote NuGet a TargetProject:
- Compilar
ClientLibraryeMainFrameworkprojetos para gerar seus .dlls - Mude o diretório para a
ClientLibrarypasta e executenuget spec
.nuspec arquivo é gerado:
<?xml version="1.0"?>
<package >
<metadata>
<id>ClientLibrary</id>
<version>1.0</version>
<title>Client Library</title>
<authors>Myself</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Client library for interacting with my application.</description>
<dependencies>
<group targetFramework=".NETFramework4.7.2" />
</dependencies>
</metadata>
</package>
Executar
nuget pack -IncludeReferencedProjects- porqueClientLibrarydependeMainFramework(e vários outros pacotes usados porMainFramework)Navegue para
TargetProject, abra o Package Manager Console- Corre
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
A instalação é executada com sucesso e, em seguida .dll, é sobre isso que eu estou reclamando.
Problema:
MainFrameworkpossui NUnite NUnit3TestAdapterpacotes NuGet instalados. ClientLibrary não. Portanto, os .dllparecem ser adicionados porque estão instalados MainFramework, mas NÃO instalados ClientLibrary. (Lembre-se de ClientLibraryreferências MainFramework.dll.)
Existem outros pacotes instalados em ambos MainFrameworke ClientLibrary, e esses não têm .dllos que são adicionados TargetProjectna instalação, portanto, estou assumindo que o problema seja causado pela presença de pacotes, MainFrameworkmas NÃO por ClientLibrary.
Eu acredito que eu posso "consertar" este problema instalando NUnite NUnit3TestAdaptersobre ClientLibrary, mas ClientLibraryna verdade não usar esses pacotes em tudo, por isso parece desnecessário.
Como posso instalar ClientLibraryno TargetProjectsem incluir os NUnite NUnit3TestAdapter .dll, sem ter que instalá NUnit- NUnit3TestAdapterlos ClientLibrary? Se possível, gostaria de dizer ClientLibrary.1.0.0.nupkgpara usar os pacotes NUnite NUnit3TestAdapterque já estão instalados TargetProject.
Se a resposta for "Não é possível", tudo bem, mas eu gostaria de uma explicação - meu objetivo geral para esta pergunta é entender melhor como o NuGet e as dependências funcionam e entender por que isso foi um problema no primeiro lugar. Obrigado pela leitura.
ClientLibraryusa apenas algumas partes de MainFramework, portanto, MainFrameworkcertamente pode ser dividido em MainFramework.Frameworke MainFramework.Test, onde as NUnitdependências só existem MainFramework.Teste são utilizadas ClientLibraryapenas MainFramework.Framework. Obrigado pela análise.
