J'ai commencé par lire cette question suggérée similaire à la mienne, mais il n'y avait pas de résolution: pourquoi MSTest.TestAdapter ajoute ses DLL dans mon package NuGet?
Description rapide du problème
J'ai écrit un package NuGet, et chaque fois que je l'installe, NUnitet NUnit3TestAdapter .dllje suis ajouté au projet sur lequel j'ai installé. Je veux trouver une solution qui résout ce problème.
Étapes de repro
J'ai poussé deux dépôts git qui reproduisent le problème que je décris.
ClientLibrary/ MainFramework(projet à partir duquel j'ai généré le package NuGet) - https://github.com/harbourc/client-library-repro-nuget-issue
TargetProject(projet sur lequel le package doit être installé) - https://github.com/harbourc/target-project-repro-nuget-issue
Vous pouvez cloner les deux référentiels, restaurer leurs packages NuGet et reproduire le problème comme suit:
Localisez ClientLibrary.1.0.0.nupkg dans client-library-repro-nuget-issue / ClientLibrary /
Ouvrez la console du gestionnaire de packages pour le problème de projet-repro-nuget cible et exécutez
Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
- Notez les
NUnitetNUnit3TestAdapter.dll« s qui sont ajoutés dansTargetProject- même siTargetProjectdéjàNUnitetNUnit3TestAdapterinstallé.
Aperçu plus long
J'ai créé mon propre package NuGet pour un usage interne, appelé ClientLibrary, et j'essaie de l'installer sur un autre projet, appelé TargetProject. Voici une ventilation rapide de la structure:
FullSolution.slnMainFramework.csprojClientLibrary.csproj->.nupkggénéré à partir de cela
Projet séparé:
TargetProject.slnTargetProject.csproj-> installer.nupkgsur ce
ClientLibrarya une référence à MainFrameworket utilise de nombreuses méthodes à partir de MainFramework.
Lors de l'installation ClientLibrary.1.0.0.nupkgsur TargetProject, les éléments suivants .dllsont ajoutés à TargetProject:
nunit.engine.api.dll
nunit.engine.dll
NUnit3.TestAdapter.dll
NUnit3.TestAdapter.pdb
Si je les supprime .dll, tout fonctionne bien, car TargetProjectces packages sont déjà installés de toute façon. Ils ne sont pas nécessaires, c'est juste ennuyeux de devoir les supprimer lors de l'installation.
Voici comment ClientLibraryj'ajoute le package NuGet à TargetProject:
- Générer
ClientLibraryetMainFrameworkprojets pour générer leurs .dll - Changez le répertoire en
ClientLibrarydossier et exécuteznuget spec
.nuspec le fichier est généré:
<?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>
Exécuter
nuget pack -IncludeReferencedProjects- ParceClientLibraryque dépend deMainFramework(et de plusieurs autres packages utilisés parMainFramework)Accédez à
TargetProject, ouvrez la console du gestionnaire de packages- Courir
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
L'installation se déroule correctement, puis ceux dont .dllje me plains sont ajoutés.
Problème:
MainFrameworka NUnitet NUnit3TestAdapterpackages NuGet installés. ClientLibrary ne fait pas. Ainsi, les .dllfichiers semblent avoir été ajoutés car ils sont installés sur MainFramework, mais PAS installés sur ClientLibrary. (N'oubliez pas, ClientLibraryréférences MainFramework.dll.)
Il y a d' autres packages installés sur les deux MainFrameworket ClientLibrary, et ceux-ci n'en ont pas .dllajoutés TargetProjectlors de l'installation, donc je suppose que le problème est causé par la présence de packages dans MainFrameworkmais PAS dans ClientLibrary.
Je crois que je peux "résoudre" ce problème en installant NUnitet NUnit3TestAdaptersur ClientLibrary, mais ClientLibraryn'utilise pas du tout ces packages, donc cela semble inutile.
Comment puis-je installer ClientLibrarysur TargetProjectsans inclure le NUnitet NUnit3TestAdapter .dll, et sans avoir à installer NUnitet NUnit3TestAdaptersur ClientLibrary? Si possible, je voudrais dire ClientLibrary.1.0.0.nupkgd'utiliser les packages NUnitet NUnit3TestAdapterqui sont déjà installés sur TargetProject.
Si la réponse est "Pas possible", c'est bien, mais je voudrais une explication - mon objectif global pour cette question est de mieux comprendre comment NuGet et les dépendances fonctionnent, et de comprendre pourquoi cela a été un problème dans le première place. Merci pour la lecture.
ClientLibraryn'utilise que certaines parties de MainFramework, donc MainFrameworkpeut certainement être divisé en MainFramework.Frameworket MainFramework.Test, où les NUnitdépendances n'existent qu'en MainFramework.Test, et ClientLibraryn'utilisent que MainFramework.Framework. Merci pour l'analyse.
