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, NUnitund NUnit3TestAdapter .dllist 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
NUnitundNUnit3TestAdapter.dll, die hinzugefügt werdenTargetProject- obwohlTargetProjectbereits vorhandenNUnitundNUnit3TestAdapterinstalliert.
Längere Übersicht
Ich habe mein eigenes NuGet-Paket für den internen Gebrauch mit dem Namen erstellt ClientLibraryund versuche, es auf einem anderen Projekt mit dem Namen zu installieren TargetProject. Hier ist eine kurze Aufschlüsselung der Struktur:
FullSolution.slnMainFramework.csprojClientLibrary.csproj-> daraus.nupkggeneriert
Separates Projekt:
TargetProject.slnTargetProject.csproj-> installieren.nupkgauf diese
ClientLibraryhat einen Verweis auf MainFrameworkund verwendet viele Methoden aus MainFramework.
Bei der Installation ClientLibrary.1.0.0.nupkgauf TargetProjectwerden folgende .dllElemente 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 TargetProjectdiese 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 ClientLibraryNuGet-Paket hinzu TargetProject:
- Build
ClientLibraryundMainFrameworkProjekte zum Generieren ihrer DLLs - Wechseln Sie in das Verzeichnis
ClientLibraryund 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- WeilClientLibraryeine Abhängigkeit vonMainFramework(und mehreren anderen vonMainFramework) verwendeten Paketen bestehtNavigieren Sie zu
TargetProjectund ö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:
MainFrameworkhat NUnitund NUnit3TestAdapterNuGet-Pakete installiert. ClientLibrary nicht. Die .dllscheinen also hinzugefügt zu werden, weil sie installiert sind MainFramework, aber NICHT installiert sind ClientLibrary. (Denken Sie daran, ClientLibraryReferenzen 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 .MainFrameworkClientLibrary.dllTargetProjectMainFrameworkClientLibrary
Ich glaube , ich kann „fix“ dieses Problem durch die Installation NUnitund NUnit3TestAdapterauf ClientLibrary, aber ClientLibrarynicht wirklich die Pakete überhaupt zu verwenden, so ist es nicht notwendig zu sein scheint.
Wie kann ich installieren ClientLibraryauf , TargetProjectohne einschließlich der NUnitund NUnit3TestAdapter .dll‚s, und ohne zu installieren NUnitund NUnit3TestAdapterauf ClientLibrary? Wenn möglich, möchte ich Ihnen mitteilen ClientLibrary.1.0.0.nupkg, dass Sie die NUnitund NUnit3TestAdapterPakete 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.
ClientLibrarynur einige Teile von MainFramework, MainFrameworkkann also sicherlich in MainFramework.Frameworkund aufgeteilt werden MainFramework.Test, wo die NUnitAbhängigkeiten nur in existieren MainFramework.Testund ClientLibrarynur nutzen MainFramework.Framework. Danke für die Analyse.
