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, NUnit
ve 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
NUnit
ve işaretlerini not edin .NUnit3TestAdapter
.dll
TargetProject
TargetProject
NUnit
NUnit3TestAdapter
Daha Uzun Genel Bakış
Dahili kullanım için kendi NuGet paketimi oluşturdum ClientLibrary
ve denilen başka bir projeye kurmaya çalışıyorum TargetProject
. İşte yapının hızlı bir dökümü:
FullSolution.sln
MainFramework.csproj
ClientLibrary.csproj
-> bundan.nupkg
üretildi
Ayrı proje:
TargetProject.sln
TargetProject.csproj
->.nupkg
üzerine yükle
ClientLibrary
başvurusu vardır MainFramework
ve 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 .dll
her şey yolunda gidiyor, çünkü TargetProject
zaten bu paketler zaten kurulu. Gerekli değil, sadece yüklerken silmek zorunda olmak sinir bozucu.
ClientLibrary
NuGet paketini şu şekilde ekliyorum TargetProject
:
- Derleme
ClientLibrary
veMainFramework
projeleri .dlls oluşturmak için - Dizini
ClientLibrary
klasö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 )ClientLibrary
bağımlılığı varMainFramework
MainFramework
TargetProject
Paket 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:
MainFramework
sahiptir NUnit
ve NUnit3TestAdapter
Nuget 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, ClientLibrary
referanslar MainFramework.dll
.)
Orada diğer ikisi yüklü paketler MainFramework
ve ClientLibrary
ve bu yok .dll
'eklenebilmeniz s TargetProject
Sorunu varsayıyorum içinde paketler mevcut olmasından kaynaklanır, böylece kurulum sırasında MainFramework
ancak DEĞİL içinde ClientLibrary
.
Ben yükleyerek elimden "düzeltme" Bu sorunu inanıyoruz NUnit
ve NUnit3TestAdapter
üzerine ClientLibrary
ama ClientLibrary
o gereksiz görünüyor böylece aslında hiç o paketleri kullanmaz.
Nasıl yükleyebilirsiniz ClientLibrary
üzerine TargetProject
içermeden NUnit
ve NUnit3TestAdapter
.dll
's ve yüklemek zorunda kalmadan NUnit
ve NUnit3TestAdapter
üzerine ClientLibrary
? Mümkünse, önceden yüklenmiş ClientLibrary.1.0.0.nupkg
olan NUnit
ve NUnit3TestAdapter
paketlerini 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.
ClientLibrary
sadece bazı bölümlerini kullanır MainFramework
böylece, MainFramework
içine kesinlikle olabilir bölünmüş MainFramework.Framework
ve MainFramework.Test
nerede NUnit
bağımlılıkları yalnızca mevcut MainFramework.Test
ve ClientLibrary
sadece kullanır MainFramework.Framework
. Analiz için teşekkürler.