NuGet paketini yüklerken bu .dll dosyalarını ekleyebilir miyim?


10

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:

  1. Client-library-repro-nuget-issue / ClientLibrary / içindeki ClientLibrary.1.0.0.nupkg dosyasını bulun

  2. 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
  1. Ö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.sln
    • MainFramework.csproj
    • ClientLibrary.csproj-> bundan .nupkgüretildi

Ayrı proje:

  • TargetProject.sln
    • TargetProject.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:

  1. Derleme ClientLibraryve MainFrameworkprojeleri .dlls oluşturmak için
  2. 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>
  1. Çalıştır nuget pack -IncludeReferencedProjects- Çünkü (ve tarafından kullanılan diğer birkaç pakete ) ClientLibrarybağımlılığı varMainFrameworkMainFramework

  2. TargetProjectPaket Yöneticisi Konsolu'na gidin , açın

  3. Ç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.


1
Davranışı göstermek için örnek projeler sağlamanız gerekecektir.
Lex Li

@LexLi Proje açıklamamı, repro adımlarıyla birlikte davranışı gösteren iki örnek havuzla güncelledim.
Christine

3
Kod, MainFramework.csproj dosyasında NUnit bağımlılıklarına sahip olmak için kötü bir yaklaşım gösterir. Onları MainFramework.UnitTest.csproj gibi ayrı bir birim test projesine taşıyabilir misiniz?
Lex Li

Bu mantıklı - 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.
Christine

Yanıtlar:


7

Genel olarak, tüm testlerinizi ve ilgili NuGet paketlerini kendi projelerinde tutmak en iyi uygulamadır. Sonra hiçbir projenin test projesine referans vermediğinden emin olun.

resim açıklamasını buraya girin

Açık yapamaz onlar bir proje olduğunu Müşteri Kitaplığı referanslar eklenmiştir çünkü yan, Müşteri Kitaplığı NUnit DLL içerecektir.

Bununla birlikte, her iki tarafın da test projesine başvurmadığı için, istemci tarafında NUnit dll'leri bulunmayacaktır.


2
Arıza ve açıklama için teşekkür ederim - projemi siz ve başka bir kullanıcının önerdiği gibi bölerek bu uygulamayı hayata geçirdim. Bu, daha önce yaptığımdan çok daha iyi bir uygulama gibi geliyor ve sorunum da çözüldü.
Christine
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.