Saya mulai dengan membaca pertanyaan yang disarankan ini mirip dengan saya, tetapi tidak ada resolusi: Mengapa MSTest.TestAdapter menambahkan DLL-nya ke dalam paket NuGet saya?
Deskripsi Masalah Cepat
Saya menulis paket NuGet, dan setiap kali saya menginstalnya, NUnitdan NUnit3TestAdapter .dllditambahkan ke proyek yang saya instal. Saya ingin mencari solusi yang memperbaiki masalah ini.
Langkah repro
Saya telah mendorong dua repositori git yang mereproduksi masalah yang saya jelaskan.
ClientLibrary/ MainFramework(proyek dari mana saya menghasilkan paket NuGet) - https://github.com/harbourc/client-library-repro-nuget-issue
TargetProject(memproyeksikan paket yang akan diinstal) - https://github.com/harbourc/target-project-repro-nuget-issue
Anda dapat mengkloning kedua repositori, memulihkan paket NuGet mereka, dan mereproduksi masalah sebagai berikut:
Temukan ClientLibrary.1.0.0.nupkg di client-library-repro-nuget-issue / ClientLibrary /
Buka konsol manajer paket untuk menjalankan target-project-repro-nuget dan menjalankannya
Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
- Perhatikan
NUnitdanNUnit3TestAdapter.dllyang ditambahkan keTargetProject- meskipunTargetProjectsudah memilikiNUnitdanNUnit3TestAdapterdiinstal.
Tinjauan yang lebih panjang
Saya telah membuat paket NuGet saya sendiri untuk penggunaan internal, dipanggil ClientLibrary, dan saya mencoba untuk menginstalnya ke proyek lain, dipanggil TargetProject. Berikut ini rincian strukturnya:
FullSolution.slnMainFramework.csprojClientLibrary.csproj->.nupkgdihasilkan dari ini
Proyek terpisah:
TargetProject.slnTargetProject.csproj-> instal.nupkgke ini
ClientLibrarymemiliki referensi ke MainFramework, dan menggunakan banyak metode dari MainFramework.
Saat menginstal ClientLibrary.1.0.0.nupkgke TargetProject, berikut ini .dllsedang ditambahkan ke TargetProject:
nunit.engine.api.dll
nunit.engine.dll
NUnit3.TestAdapter.dll
NUnit3.TestAdapter.pdb
Jika saya menghapus ini .dll, semuanya berfungsi dengan baik, karena TargetProjectsudah menginstal paket-paket itu. Mereka tidak perlu, itu hanya menjengkelkan harus menghapusnya saat menginstal.
Inilah cara saya menambahkan ClientLibrarypaket NuGet ke TargetProject:
- Bangun
ClientLibrarydanMainFrameworkproyek untuk menghasilkan .dlls mereka - Ubah direktori menjadi
ClientLibraryfolder dan jalankannuget spec
.nuspec file dihasilkan:
<?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>
Jalankan
nuget pack -IncludeReferencedProjects- KarenaClientLibrarymemiliki ketergantungan padaMainFramework(dan beberapa paket lain yang digunakan olehMainFramework)Arahkan ke
TargetProject, buka Package Manager Console- Lari
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
Instalasi berjalan dengan sukses, dan kemudian itu .dll saya keluhkan tentang ditambahkan.
Masalah:
MainFrameworktelah NUnitdan NUnit3TestAdapterpaket NuGet diinstal. ClientLibrary tidak. Jadi, .dllsepertinya ditambahkan karena sudah diinstal MainFramework, tetapi TIDAK diinstal ClientLibrary. (Ingat, ClientLibraryreferensi MainFramework.dll.)
Ada paket lain yang diinstal pada keduanya MainFrameworkdan ClientLibrary, dan ini tidak memiliki .dllyang ditambahkan pada TargetProjectsaat instalasi, jadi saya berasumsi masalah disebabkan oleh memiliki paket hadir MainFrameworktetapi TIDAK masuk ClientLibrary.
Saya percaya saya bisa "memperbaiki" masalah ini dengan menginstal NUnitdan NUnit3TestAdapterke ClientLibrary, tetapi ClientLibrarytidak benar-benar menggunakan paket tersebut sama sekali, sehingga tampaknya tidak perlu.
Bagaimana saya bisa menginstal ClientLibraryke TargetProjecttanpa menyertakan NUnitdan NUnit3TestAdapter .dll, dan tanpa harus menginstal NUnitdan NUnit3TestAdapterke ClientLibrary? Jika memungkinkan, saya ingin memberi tahu ClientLibrary.1.0.0.nupkguntuk menggunakan NUnitdan NUnit3TestAdapterpaket yang sudah diinstal pada TargetProject.
Jika jawabannya "Tidak mungkin", itu baik-baik saja, tetapi saya ingin penjelasan - tujuan keseluruhan saya untuk pertanyaan ini adalah untuk mendapatkan pemahaman yang lebih baik tentang bagaimana NuGet dan dependensi bekerja, dan memahami mengapa ini menjadi masalah dalam tempat pertama. Terima kasih telah membaca.
ClientLibraryhanya menggunakan beberapa bagian MainFramework, jadi MainFrameworkpasti dapat dibagi menjadi MainFramework.Frameworkdan MainFramework.Test, di mana NUnitdependensi hanya ada MainFramework.Test, dan ClientLibraryhanya memanfaatkan MainFramework.Framework. Terima kasih atas analisisnya.
