Zacząłem od przeczytania tego sugerowanego pytania podobnego do mojego, ale nie było rozwiązania: Dlaczego MSTest.TestAdapter dodaje swoje biblioteki DLL do mojego pakietu NuGet?
Krótki opis problemu
Napisałem pakiet Nuget, i za każdym razem go zainstalować, NUnita NUnit3TestAdapter .dll„s dodane do projektu I zainstalowany. Chcę znaleźć rozwiązanie, które naprawi ten problem.
Kroki repro
Przekazałem dwa repozytoria git, które odtwarzają opisywany przeze mnie problem.
ClientLibrary/ MainFramework(projekt, z którego wygenerowałem pakiet NuGet) - https://github.com/harbourc/client-library-repro-nuget-issue
TargetProject(projekt, na którym pakiet ma zostać zainstalowany) - https://github.com/harbourc/target-project-repro-nuget-issue
Możesz sklonować oba repozytoria, przywrócić ich pakiety NuGet i odtworzyć problem w następujący sposób:
Zlokalizuj ClientLibrary.1.0.0.nupkg w kliencie-biblioteki-repro-nuget-problem / ClientLibrary /
Otwórz konsolę menedżera pakietów dla wydania target-project-repro-nuget i uruchom
Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
- Zwróć uwagę na
NUnitiNUnit3TestAdapter.dll, które są dodawane doTargetProject- mimo że sąTargetProjectjuż zainstalowaneNUnitiNUnit3TestAdapterzainstalowane.
Dłuższy przegląd
Utworzyłem własny pakiet NuGet do użytku wewnętrznego, o nazwie ClientLibrary, i próbuję zainstalować go w innym projekcie o nazwie TargetProject. Oto szybki podział struktury:
FullSolution.slnMainFramework.csprojClientLibrary.csproj->.nupkgwygenerowane z tego
Oddzielny projekt:
TargetProject.slnTargetProject.csproj-> zainstaluj.nupkgna tym
ClientLibraryma odniesienie do MainFrameworki używa wielu metod z MainFramework.
Podczas instalowania ClientLibrary.1.0.0.nupkgdo TargetProject, .dlldodawane są następujące elementy TargetProject:
nunit.engine.api.dll
nunit.engine.dll
NUnit3.TestAdapter.dll
NUnit3.TestAdapter.pdb
Jeśli je usunę .dll, wszystko działa poprawnie, ponieważ i tak TargetProjectjuż te pakiety są już zainstalowane. Nie są konieczne, po prostu irytujące jest ich usunięcie podczas instalacji.
Oto jak ClientLibrarydodam pakiet NuGet do TargetProject:
- Budowa
ClientLibraryiMainFrameworkprojekty generują swoje .dlls - Zmień katalog na
ClientLibraryfolder i uruchomnuget spec
.nuspec plik jest generowany:
<?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>
Uruchom
nuget pack -IncludeReferencedProjects- ponieważClientLibraryma zależność odMainFramework(i kilku innych pakietów używanych przezMainFramework)Przejdź do
TargetProject, otwórz konsolę Menedżera pakietów- Biegać
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
Instalacja przebiega pomyślnie, a potem .dllnarzekam na dodanie.
Problem:
MainFrameworkma NUniti NUnit3TestAdapterzainstalowane pakiety NuGet. ClientLibrary nie. Wygląda na .dllto, że zostały dodane, ponieważ są zainstalowane MainFramework, ale NIE są zainstalowane ClientLibrary. (Pamiętaj, ClientLibraryreferencje MainFramework.dll.)
Istnieją inne pakiety zainstalowane na obu MainFrameworki ClientLibrary, i te nie mają tych, .dllktóre są dodawane TargetProjectpodczas instalacji, więc zakładam, że problem jest spowodowany obecnością pakietów, MainFrameworkale NIE w ClientLibrary.
Wydaje mi się, że mogę „naprawić” ten problem, instalując go NUniti NUnit3TestAdapterna nim ClientLibrary, ale ClientLibrarytak naprawdę nie używa tych pakietów, więc wydaje się to niepotrzebne.
Jak mogę zainstalować ClientLibraryna, TargetProjectbez uwzględnienia NUniti NUnit3TestAdapter .dll, i bez konieczności instalacji NUniti NUnit3TestAdapterna ClientLibrary? Jeśli to możliwe, chciałbym powiedzieć, ClientLibrary.1.0.0.nupkgaby użyć pakietów NUniti NUnit3TestAdapter, które są już zainstalowane TargetProject.
Jeśli odpowiedź brzmi „Niemożliwe”, to dobrze, ale chciałbym wyjaśnienia - moim ogólnym celem tego pytania jest lepsze zrozumienie działania NuGet i zależności oraz zrozumienie, dlaczego jest to problem w pierwsze miejsce. Dziękuję za przeczytanie.
ClientLibrarywykorzystuje tylko niektóre części MainFramework, więc z MainFrameworkpewnością można je podzielić na MainFramework.Frameworki MainFramework.Test, gdzie NUnitzależności istnieją tylko MainFramework.Testi ClientLibrarytylko je wykorzystują MainFramework.Framework. Dziękuję za analizę.
