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.
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. –
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. –
@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? –