Ich habe zunächst diese vorgeschlagene Frage gelesen, die meiner ähnlich ist, aber es gab keine Lösung: Warum fügt MSTest.TestAdapter seine DLLs meinem NuGet-Paket hinzu?
Kurze Problembeschreibung
Ich schrieb ein NuGet Paket, und jedes Mal , wenn ich es installieren, NUnit
und NUnit3TestAdapter
.dll
ist mit dem Projekt , das ich auf installiert werden hinzugefügt. Ich möchte eine Lösung finden, die dieses Problem behebt.
Repro Schritte
Ich habe zwei Git-Repositories verschoben, die das von mir beschriebene Problem reproduzieren.
ClientLibrary
/ MainFramework
(Projekt, aus dem ich das NuGet-Paket generiert habe) - https://github.com/harbourc/client-library-repro-nuget-issue
TargetProject
(Projekt, auf dem das Paket installiert werden soll) - https://github.com/harbourc/target-project-repro-nuget-issue
Sie können beide Repositorys klonen, ihre NuGet-Pakete wiederherstellen und das Problem wie folgt reproduzieren:
Suchen Sie ClientLibrary.1.0.0.nupkg in client-library-repro-nuget-issue / ClientLibrary /
Öffnen Sie die Paketmanagerkonsole für das Zielprojekt-Repro-Nuget-Problem und führen Sie sie aus
Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
- Beachten Sie die
NUnit
undNUnit3TestAdapter
.dll
, die hinzugefügt werdenTargetProject
- obwohlTargetProject
bereits vorhandenNUnit
undNUnit3TestAdapter
installiert.
Längere Übersicht
Ich habe mein eigenes NuGet-Paket für den internen Gebrauch mit dem Namen erstellt ClientLibrary
und versuche, es auf einem anderen Projekt mit dem Namen zu installieren TargetProject
. Hier ist eine kurze Aufschlüsselung der Struktur:
FullSolution.sln
MainFramework.csproj
ClientLibrary.csproj
-> daraus.nupkg
generiert
Separates Projekt:
TargetProject.sln
TargetProject.csproj
-> installieren.nupkg
auf diese
ClientLibrary
hat einen Verweis auf MainFramework
und verwendet viele Methoden aus MainFramework
.
Bei der Installation ClientLibrary.1.0.0.nupkg
auf TargetProject
werden folgende .dll
Elemente hinzugefügt TargetProject
:
nunit.engine.api.dll
nunit.engine.dll
NUnit3.TestAdapter.dll
NUnit3.TestAdapter.pdb
Wenn ich diese lösche .dll
, funktioniert alles einwandfrei, da TargetProject
diese Pakete ohnehin schon installiert sind. Sie sind nicht erforderlich, es ist nur ärgerlich, sie bei der Installation löschen zu müssen.
So füge ich das ClientLibrary
NuGet-Paket hinzu TargetProject
:
- Build
ClientLibrary
undMainFramework
Projekte zum Generieren ihrer DLLs - Wechseln Sie in das Verzeichnis
ClientLibrary
und führen Sie es ausnuget spec
.nuspec
Datei wird generiert:
<?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>
Ausführen
nuget pack -IncludeReferencedProjects
- WeilClientLibrary
eine Abhängigkeit vonMainFramework
(und mehreren anderen vonMainFramework
) verwendeten Paketen bestehtNavigieren Sie zu
TargetProject
und öffnen Sie die Package Manager-Konsole- Lauf
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
Die Installation wird erfolgreich ausgeführt, und dann werden die .dll
, über die ich mich beschwere, hinzugefügt.
Problem:
MainFramework
hat NUnit
und NUnit3TestAdapter
NuGet-Pakete installiert. ClientLibrary
nicht. Die .dll
scheinen also hinzugefügt zu werden, weil sie installiert sind MainFramework
, aber NICHT installiert sind ClientLibrary
. (Denken Sie daran, ClientLibrary
Referenzen MainFramework.dll
.)
Auf beiden und sind andere Pakete installiert , und diese haben keine, die bei der Installation hinzugefügt werden. Ich gehe daher davon aus , dass das Problem dadurch verursacht wird, dass Pakete vorhanden sind, aber NICHT in .MainFramework
ClientLibrary
.dll
TargetProject
MainFramework
ClientLibrary
Ich glaube , ich kann „fix“ dieses Problem durch die Installation NUnit
und NUnit3TestAdapter
auf ClientLibrary
, aber ClientLibrary
nicht wirklich die Pakete überhaupt zu verwenden, so ist es nicht notwendig zu sein scheint.
Wie kann ich installieren ClientLibrary
auf , TargetProject
ohne einschließlich der NUnit
und NUnit3TestAdapter
.dll
‚s, und ohne zu installieren NUnit
und NUnit3TestAdapter
auf ClientLibrary
? Wenn möglich, möchte ich Ihnen mitteilen ClientLibrary.1.0.0.nupkg
, dass Sie die NUnit
und NUnit3TestAdapter
Pakete verwenden sollen, auf denen bereits installiert ist TargetProject
.
Wenn die Antwort "Nicht möglich" lautet, ist das in Ordnung, aber ich hätte gerne eine Erklärung - mein übergeordnetes Ziel für diese Frage ist es, ein besseres Verständnis der Funktionsweise von NuGet und Abhängigkeiten zu erlangen und zu verstehen, warum dies ein Problem in der EU war erster Platz. Danke fürs Lesen.
ClientLibrary
nur einige Teile vonMainFramework
,MainFramework
kann also sicherlich inMainFramework.Framework
und aufgeteilt werdenMainFramework.Test
, wo dieNUnit
Abhängigkeiten nur in existierenMainFramework.Test
undClientLibrary
nur nutzenMainFramework.Framework
. Danke für die Analyse.Antworten:
Im Allgemeinen empfiehlt es sich, alle Ihre Tests und entsprechenden NuGet-Pakete in einem eigenen Projekt zu speichern. Stellen Sie dann sicher, dass keines der Projekte auf das Testprojekt verweist.
Auf der Nicht- Seite enthält die Client-Bibliothek die NUnit-DLLs, da sie einem Projekt hinzugefügt wurden, auf das die Client-Bibliothek verweist.
Auf der Do- Seite enthält die Client-Bibliothek keine NUnit-DLLs, da weder auf das Testprojekt verwiesen wird.
quelle