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, NUnit
e 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
NUnit
eNUnit3TestAdapter
.dll
adicionadosTargetProject
, emboraTargetProject
já os tenha instaladoNUnit
eNUnit3TestAdapter
instalado.
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.sln
MainFramework.csproj
ClientLibrary.csproj
->.nupkg
gerado a partir disso
Projeto separado:
TargetProject.sln
TargetProject.csproj
-> instalar.nupkg
neste
ClientLibrary
tem uma referência MainFramework
e usa muitos métodos de MainFramework
.
Ao instalar ClientLibrary.1.0.0.nupkg
no TargetProject
, os seguintes .dll
itens são adicionados a TargetProject
:
nunit.engine.api.dll
nunit.engine.dll
NUnit3.TestAdapter.dll
NUnit3.TestAdapter.pdb
Se eu excluir esses .dll
itens, tudo funcionará bem, porque TargetProject
esses 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 ClientLibrary
pacote NuGet a TargetProject
:
- Compilar
ClientLibrary
eMainFramework
projetos para gerar seus .dlls - Mude o diretório para a
ClientLibrary
pasta 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
- porqueClientLibrary
dependeMainFramework
(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:
MainFramework
possui NUnit
e NUnit3TestAdapter
pacotes NuGet instalados. ClientLibrary
não. Portanto, os .dll
parecem ser adicionados porque estão instalados MainFramework
, mas NÃO instalados ClientLibrary
. (Lembre-se de ClientLibrary
referências MainFramework.dll
.)
Existem outros pacotes instalados em ambos MainFramework
e ClientLibrary
, e esses não têm .dll
os que são adicionados TargetProject
na instalação, portanto, estou assumindo que o problema seja causado pela presença de pacotes, MainFramework
mas NÃO por ClientLibrary
.
Eu acredito que eu posso "consertar" este problema instalando NUnit
e NUnit3TestAdapter
sobre ClientLibrary
, mas ClientLibrary
na verdade não usar esses pacotes em tudo, por isso parece desnecessário.
Como posso instalar ClientLibrary
no TargetProject
sem incluir os NUnit
e NUnit3TestAdapter
.dll
, sem ter que instalá NUnit
- NUnit3TestAdapter
los ClientLibrary
? Se possível, gostaria de dizer ClientLibrary.1.0.0.nupkg
para usar os pacotes NUnit
e NUnit3TestAdapter
que 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.
ClientLibrary
usa apenas algumas partes deMainFramework
, portanto,MainFramework
certamente pode ser dividido emMainFramework.Framework
eMainFramework.Test
, onde asNUnit
dependências só existemMainFramework.Test
e são utilizadasClientLibrary
apenasMainFramework.Framework
. Obrigado pela análise.Respostas:
Em geral, é uma boa prática manter todos os seus testes e pacotes NuGet correspondentes em seu próprio projeto. Em seguida, verifique se nenhum dos projetos faz referência ao projeto de teste.
No lado não , a Biblioteca do Cliente incluirá as DLLs do NUnit porque elas foram adicionadas a um projeto mencionado pela Biblioteca do Cliente.
Considerando que, com afazeres lado, Biblioteca cliente não incluirá o NUnit dlls porque nem referência o projeto de teste.
fonte