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, NUnit
et NUnit3TestAdapter
.dll
je 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
NUnit
etNUnit3TestAdapter
.dll
« s qui sont ajoutés dansTargetProject
- même siTargetProject
déjàNUnit
etNUnit3TestAdapter
installé.
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.sln
MainFramework.csproj
ClientLibrary.csproj
->.nupkg
généré à partir de cela
Projet séparé:
TargetProject.sln
TargetProject.csproj
-> installer.nupkg
sur ce
ClientLibrary
a une référence à MainFramework
et utilise de nombreuses méthodes à partir de MainFramework
.
Lors de l'installation ClientLibrary.1.0.0.nupkg
sur TargetProject
, les éléments suivants .dll
sont 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 TargetProject
ces 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 ClientLibrary
j'ajoute le package NuGet à TargetProject
:
- Générer
ClientLibrary
etMainFramework
projets pour générer leurs .dll - Changez le répertoire en
ClientLibrary
dossier 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
- ParceClientLibrary
que 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 .dll
je me plains sont ajoutés.
Problème:
MainFramework
a NUnit
et NUnit3TestAdapter
packages NuGet installés. ClientLibrary
ne fait pas. Ainsi, les .dll
fichiers semblent avoir été ajoutés car ils sont installés sur MainFramework
, mais PAS installés sur ClientLibrary
. (N'oubliez pas, ClientLibrary
références MainFramework.dll
.)
Il y a d' autres packages installés sur les deux MainFramework
et ClientLibrary
, et ceux-ci n'en ont pas .dll
ajoutés TargetProject
lors de l'installation, donc je suppose que le problème est causé par la présence de packages dans MainFramework
mais PAS dans ClientLibrary
.
Je crois que je peux "résoudre" ce problème en installant NUnit
et NUnit3TestAdapter
sur ClientLibrary
, mais ClientLibrary
n'utilise pas du tout ces packages, donc cela semble inutile.
Comment puis-je installer ClientLibrary
sur TargetProject
sans inclure le NUnit
et NUnit3TestAdapter
.dll
, et sans avoir à installer NUnit
et NUnit3TestAdapter
sur ClientLibrary
? Si possible, je voudrais dire ClientLibrary.1.0.0.nupkg
d'utiliser les packages NUnit
et NUnit3TestAdapter
qui 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.
ClientLibrary
n'utilise que certaines parties deMainFramework
, doncMainFramework
peut certainement être divisé enMainFramework.Framework
etMainFramework.Test
, où lesNUnit
dépendances n'existent qu'enMainFramework.Test
, etClientLibrary
n'utilisent queMainFramework.Framework
. Merci pour l'analyse.Réponses:
En général, il est recommandé de conserver tous vos tests et packages NuGet correspondants dans leur propre projet. Assurez-vous ensuite qu'aucun des projets ne fait référence au projet de test.
Côté non , la bibliothèque client inclura les DLL NUnit car elles ont été ajoutées à un projet référencé par la bibliothèque client.
Considérant que , do côté, bibliothèque client ne comprend pas le NUnit DLLs parce que ni référence le projet de test.
la source