Ho iniziato leggendo questa domanda suggerita simile alla mia, ma non c'era soluzione: perché MSTest.TestAdapter aggiunge le sue DLL nel mio pacchetto NuGet?
Descrizione rapida del problema
Ho scritto un pacchetto NuGet, e ogni volta che lo installo, NUnite NUnit3TestAdapter .dllvengo aggiunto al progetto su cui ho installato. Voglio trovare una soluzione che risolva questo problema.
Ripetere i passaggi
Ho spinto due repository git che riproducono il problema che sto descrivendo.
ClientLibrary/ MainFramework(progetto dal quale ho generato il pacchetto NuGet) - https://github.com/harbourc/client-library-repro-nuget-issue
TargetProject(progetto su cui installare il pacchetto) - https://github.com/harbourc/target-project-repro-nuget-issue
È possibile clonare entrambi i repository, ripristinare i relativi pacchetti NuGet e riprodurre il problema come segue:
Trova ClientLibrary.1.0.0.nupkg in client-library-repro-nuget-issue / ClientLibrary /
Aprire la console di gestione dei pacchetti per target-project-repro-nuget-issue ed eseguire
Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
- Nota gli
NUniteNUnit3TestAdapter.dllche vengono aggiunti inTargetProject- anche se sonoTargetProjectgià installatiNUniteNUnit3TestAdapterinstallati.
Panoramica più lunga
Ho creato il mio pacchetto NuGet per uso interno, chiamato ClientLibrary, e sto tentando di installarlo su un altro progetto, chiamato TargetProject. Ecco una rapida suddivisione della struttura:
FullSolution.slnMainFramework.csprojClientLibrary.csproj->.nupkggenerato da questo
Progetto separato:
TargetProject.slnTargetProject.csproj-> installa.nupkgsu questo
ClientLibraryha un riferimento a MainFrameworke utilizza molti metodi da MainFramework.
Durante l'installazione ClientLibrary.1.0.0.nupkgsu TargetProject, .dllvengono aggiunti a TargetProject:
nunit.engine.api.dll
nunit.engine.dll
NUnit3.TestAdapter.dll
NUnit3.TestAdapter.pdb
Se li elimino .dll, tutto funziona benissimo, perché TargetProjectgià quei pacchetti sono già installati. Non sono necessari, è solo fastidioso doverli eliminare durante l'installazione.
Ecco come sto aggiungendo il ClientLibrarypacchetto NuGet a TargetProject:
- Costruisci
ClientLibraryeMainFrameworkprogetti per generare i loro .dlls - Cambia directory in
ClientLibrarycartella ed eseguinuget spec
.nuspec il file viene generato:
<?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>
Esegui
nuget pack -IncludeReferencedProjects- PerchéClientLibraryha una dipendenza daMainFramework(e molti altri pacchetti utilizzati daMainFramework)Passare a
TargetProject, aprire Console Gestione pacchetti- Correre
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
L'installazione è andata a buon fine e poi quelli .dlldi cui mi sto lamentando vengono aggiunti.
Problema:
MainFrameworkha NUnite NUnit3TestAdapterpacchetti Nuget installati. ClientLibrary non. Quindi, .dllsembra che vengano aggiunti perché installati MainFramework, ma NON installati ClientLibrary. (Ricorda, ClientLibraryriferimenti MainFramework.dll.)
Ci sono altri pacchetti installati su entrambi MainFrameworke ClientLibrary, e questi non hanno quelli .dllche vengono aggiunti TargetProjectdurante l'installazione, quindi presumo che il problema sia causato dalla presenza di pacchetti presenti MainFrameworkma NON in ClientLibrary.
Credo di poter "risolvere" questo problema installando NUnit e NUnit3TestAdaptersu ClientLibrary, ma in ClientLibraryrealtà non usa affatto quei pacchetti, quindi non sembra necessario.
Come posso installare ClientLibrarysul TargetProjectsenza includere le NUnite NUnit3TestAdapter .dlls', e senza dover installare NUnite NUnit3TestAdaptersu ClientLibrary? Se possibile, vorrei dire ClientLibrary.1.0.0.nupkgdi usare i pacchetti NUnite NUnit3TestAdapterche sono già installati TargetProject.
Se la risposta è "Non possibile", va bene, ma vorrei una spiegazione - il mio obiettivo generale per questa domanda è di comprendere meglio come funzionano NuGet e le dipendenze e capire perché questo è stato un problema nel primo posto. Grazie per aver letto.
ClientLibraryusa solo alcune parti di MainFramework, quindi MainFrameworkpuò certamente essere suddiviso in MainFramework.Frameworke MainFramework.Test, dove NUnitesistono solo le dipendenze MainFramework.Teste ClientLibrarysolo utilizza MainFramework.Framework. Grazie per l'analisi.
