Benimkine benzer bu önerilen soruyu okuyarak başladım, ancak çözüm yoktu: Neden MSTest.TestAdapter DLL'lerini NuGet paketine ekliyor?
Hızlı Sorun Açıklaması
Bir Nuget paketi yazmış ve her zaman bunu yüklemek, NUnitve NUnit3TestAdapter .dll'nin ben yüklü projeye eklenen olsun. Bu sorunu çözen bir çözüm bulmak istiyorum.
Adımları yeniden oluşturma
Açıkladığım sorunu yeniden üreten iki git deposunu ittim.
ClientLibrary/ MainFramework(NuGet paketini oluşturduğum proje) - https://github.com/harbourc/client-library-repro-nuget-issue
TargetProject(paketin yükleneceği proje) - https://github.com/harbourc/target-project-repro-nuget-issue
Her iki havuzu da klonlayabilir, NuGet paketlerini geri yükleyebilir ve sorunu aşağıdaki gibi yeniden oluşturabilirsiniz:
Client-library-repro-nuget-issue / ClientLibrary / içindeki ClientLibrary.1.0.0.nupkg dosyasını bulun
Hedef-proje-repro-nuget sorunu için paket yöneticisi konsolunu açın ve çalıştırın
Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
- Önceden yüklenmiş ve kurulmuş olmasına rağmen eklenen
NUnitve işaretlerini not edin .NUnit3TestAdapter.dllTargetProjectTargetProjectNUnitNUnit3TestAdapter
Daha Uzun Genel Bakış
Dahili kullanım için kendi NuGet paketimi oluşturdum ClientLibraryve denilen başka bir projeye kurmaya çalışıyorum TargetProject. İşte yapının hızlı bir dökümü:
FullSolution.slnMainFramework.csprojClientLibrary.csproj-> bundan.nupkgüretildi
Ayrı proje:
TargetProject.slnTargetProject.csproj->.nupkgüzerine yükle
ClientLibrarybaşvurusu vardır MainFrameworkve ile ilgili birçok yöntem kullanır MainFramework.
Kurarken ClientLibrary.1.0.0.nupkgüzerine TargetProject, şu .dll'ın eklenmeye edilir TargetProject:
nunit.engine.api.dll
nunit.engine.dll
NUnit3.TestAdapter.dll
NUnit3.TestAdapter.pdb
Bunları silersem .dllher şey yolunda gidiyor, çünkü TargetProjectzaten bu paketler zaten kurulu. Gerekli değil, sadece yüklerken silmek zorunda olmak sinir bozucu.
ClientLibraryNuGet paketini şu şekilde ekliyorum TargetProject:
- Derleme
ClientLibraryveMainFrameworkprojeleri .dlls oluşturmak için - Dizini
ClientLibraryklasöre değiştirin ve çalıştırınnuget spec
.nuspec dosya oluşturulur:
<?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>
Çalıştır
nuget pack -IncludeReferencedProjects- Çünkü (ve tarafından kullanılan diğer birkaç pakete )ClientLibrarybağımlılığı varMainFrameworkMainFrameworkTargetProjectPaket Yöneticisi Konsolu'na gidin , açın- Çalıştırmak
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
Kurulum başarılı bir şekilde çalışıyor ve sonra .dllşikayet edeceğim kişiler ekleniyor.
Sorun:
MainFrameworksahiptir NUnitve NUnit3TestAdapterNuget paketleri yüklü. ClientLibrary değil. Yani, .dll'eklenmiş gibi görünüyor, çünkü onlar yüklü MainFramework, ama yüklü DEĞİL ClientLibrary. (Unutmayın, ClientLibraryreferanslar MainFramework.dll.)
Orada diğer ikisi yüklü paketler MainFrameworkve ClientLibraryve bu yok .dll'eklenebilmeniz s TargetProjectSorunu varsayıyorum içinde paketler mevcut olmasından kaynaklanır, böylece kurulum sırasında MainFrameworkancak DEĞİL içinde ClientLibrary.
Ben yükleyerek elimden "düzeltme" Bu sorunu inanıyoruz NUnitve NUnit3TestAdapterüzerine ClientLibraryama ClientLibraryo gereksiz görünüyor böylece aslında hiç o paketleri kullanmaz.
Nasıl yükleyebilirsiniz ClientLibraryüzerine TargetProjectiçermeden NUnitve NUnit3TestAdapter .dll's ve yüklemek zorunda kalmadan NUnitve NUnit3TestAdapterüzerine ClientLibrary? Mümkünse, önceden yüklenmiş ClientLibrary.1.0.0.nupkgolan NUnitve NUnit3TestAdapterpaketlerini kullanmayı söylemek istiyorum .TargetProject
Cevap "Mümkün değil" ise, bu iyi, ama bir açıklama istiyorum - bu soru için genel amacım NuGet ve bağımlılıkların nasıl çalıştığını daha iyi anlamak ve bunun neden bir sorun olduğunu anlamak ilk yer. Okuduğunuz için teşekkürler.
ClientLibrarysadece bazı bölümlerini kullanır MainFrameworkböylece, MainFrameworkiçine kesinlikle olabilir bölünmüş MainFramework.Frameworkve MainFramework.Testnerede NUnitbağımlılıkları yalnızca mevcut MainFramework.Testve ClientLibrarysadece kullanır MainFramework.Framework. Analiz için teşekkürler.
