2016-05-09 48 views
9

Nuget Paket Yöneticisi'ni kullanarak AvsAn (2.1.0) paketini yüklüyorum. Ben paketler dizinine olmasını referans yolunu bekliyorum, gibi bir şey:Nuget'ten yükleme, bin dizinine başvuru ekler

C: \ app \ paketleri \

Ama bin dizinine bir referans eklenir AvsAn.dll:

C:

Confusingly bu (yani referans yolu bazı paketler için değil başkaları için oluyor \ AvsAn.dll \ app \ NameSpace \ bin

Ben

  • Kaldırılması denenmiş ve benzer bir şey Googling paketi
  • yeniden ettik ne (bir şey)
bulamadı oldum) beklendiği gibi, paketler klasörüne olduğunu
+0

Bir projedeki tüm paketler için görüyorum, diğer projelerdeki aynı paketler (hepsi aynı çözüm içinde) "doğru" paket yolunu kullanıyor. –

+0

Bir cevap olup olmadığından emin değil. Bizim csproj dosyalarını düzenledik. Karışık olan bazı versiyonlarımız vardı. Farklı projeler birbirinden farklı versiyonları kullanıyor. Başvurulan sürüm, yolun içinde listelenen sürümden farklı. Bu yüzden hepsini açtım ve onları aynı şekilde temizledim. –

+0

@DavidMartin işe yaradı! .csproj dosyasındaki tüm Content Include & Reference Include referanslarını açıkladım ve bir dahaki sefere pakete ekledikten sonra doğru yolu ekledim. Bunu bir cevap olarak yayınlamaya özen göstererek kabul edebilir miyim? –

cevap

4

Aynı çözümdeki farklı projelerin birbirinden farklı versiyonlar kullandığını gördük. Ayrıca, tek bir proje, HintPath'da listelenen sürümden <Reference> öğesinde listelenen bir sürümü olabilir.

Her bir .csproj dosyasını inceledik ve her şeyi senkronize almak için el ile düzenledik.

  • söz konusu dll için bilgi içerir <Reference ile başlayan satırı bulun.
  • Bu satır bir sürümü belirtmelidir. Örneğin: <Reference Include="SomeAssembly, Version=4.0.54">. Bundan sonra Culture ve/veya PublicKey, vb. Gibi bazı ek metinler olabilir. Sadece Version özniteliğiyle ilgileniyoruz.
  • Bu Sürümün not alın.
  • Şimdi <Reference içindeki <HintPath> öğesini kontrol edin, VS'nin bekleyeceği yolu (VS'nin ilk önce nerede görüneceğini) içerecektir.
  • Bu yol ayrıca bir sürüm ..\packages\SomePackage.4.0.56\lib\net45\SomeAssembly.dll da içerecektir (örneğin - bizim durumumuzda Service Stack paketleriydi). Bu teknik olarak bir sürüm olmasa da (sisteminizde yalnızca bir dosyaya giden yol), genellikle dll sürümüne karşılık gelir.
  • Bu iki öğenin eşzamanlı olduğundan emin olmanız gerekir - listelenen yolun gerçekte var olduğunu ve beklenen dll'ye yol açtığını.

Durumumuzda ServiceStack 4.0.54'ten 4.0.56'ya geçiyorduk. Include referanslarından bazıları 4.0.54 sürümüne geçerken, yol hala 4.0.54 sürümüne işaret ediyordu. Ipucu yolu beklenen dll VS başka bir yere baktı ve proje \bin\debug dizininde kabul edilebilir bir eşleşme olduğuna inandığı bulundu. Bu doğru sürüm değildi.

Ne tür ve ne olacağı ile ilgili özel durumunuza bağlı olacaktır.Bu, büyük olasılıkla zayıf birleştirmelerden kaynaklanıyordu.


Ayrıca biz proje klasörüne altına \bin ve \packages dizinleri temizlemiş. Reloaded çözüm ve Nuget geri yükleyin. Bu sadece şeyleri temizlemektir, böylece Nuget sadece ihtiyaç duyduğu paketleri ve versiyonlarını indirebilir. Ve VS'nin projenin \bin dizininde bulunabilecek yanlış sürümlerini kullanmasını engeller. Her ikisi de silmek için güvenlidir. \packages klasörü yeniden yaratılacak ve Nuget restoru ile doldurulacak ve \bin dizini yeniden oluşturulacak ve bir sonraki çözümün üzerine yerleştirilecek.

+0

Biraz daha açıklayabilir misiniz - bu gibi görünen tüm bin başvuruları kaldırmalıyım: ''. Ayrıca, "Referans İçeriği" ni şu şekilde bırakmalıyım: .. \ packages \ AvsAn.2.1.0.0 \ lib \ net20 \ AvsAn.dll ' Onları elle düzenlediğinizden emin değilim. her şeyi senkronize edin - lütfen daha ayrıntılı olarak açıklayabilir misiniz? –

+0

Umarım açıklık sağlamak için cevabı düzenledim. –

+0

Neyi kastettiğinizi açıklamak için zaman ayırdığınız için teşekkür ederiz. Bir sorum var - üzerinde çalıştığım çözüm, 'Include Include' olan paketlerin bin dizinine ait İçerik İçeriği içeriyor - sadece onları kaldırmalı mıyım? (Bunu yapmanın etkilerini tam olarak anlamadım) –