Saya memiliki aplikasi .NET Framework 4.7.2 yang sangat sederhana dengan nuget berikut:

<packages>
  <package id="Autofac" version="5.1.2" targetFramework="net472" />
  <package id="DynamicData" version="6.14.8" targetFramework="net472" />
  <package id="Microsoft.Bcl.AsyncInterfaces" version="1.1.0" targetFramework="net472" />
  <package id="MSBuildTasks" version="1.5.0.235" targetFramework="net472" developmentDependency="true" />
  <package id="ReactiveUI" version="11.2.3" targetFramework="net472" />
  <package id="Serilog" version="2.9.0" targetFramework="net472" />
  <package id="Serilog.Enrichers.Process" version="2.0.1" targetFramework="net472" />
  <package id="Serilog.Enrichers.Thread" version="3.1.0" targetFramework="net472" />
  <package id="Serilog.Sinks.File" version="4.1.0" targetFramework="net472" />
  <package id="Splat" version="9.3.11" targetFramework="net472" />
  <package id="System.Reactive" version="4.3.2" targetFramework="net472" />
  <package id="System.Runtime.CompilerServices.Unsafe" version="4.7.0" targetFramework="net472" />
  <package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net472" />
  <package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
</packages>

Seperti yang Anda lihat, ada System.Threading.Tasks.Extensions yang dirujuk dalam versi 4.5.3 (Saya tidak dapat mengubah versi ini, karena paket lain bergantung padanya).

Ketika saya pergi ke properti referensi DLL ini di Visual Studio Solution Explorer, itu menunjukkan versi 4.2.0.1 yang direferensikan dari .....\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll.

Di app.config ada pengalihan pengikatan yang dibuat secara otomatis:

   <dependentAssembly>
    <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
  </dependentAssembly>

Ketika saya menjalankan aplikasi, saya mendapatkan pengecualian:

Exception message

Saya sudah mencoba mengubah pengalihan pengikatan menjadi sesuatu seperti:

   <bindingRedirect oldVersion="0.0.0.0-99.99.99.99" newVersion="4.5.3" />

Tapi masalah tetap ada. Saya tidak tahu bagaimana menyelesaikan dll-neraka ini. Bantuan apa pun akan sangat dihargai.

4
Signum 13 Maret 2020, 01:38

1 menjawab

Jawaban Terbaik

Ketika saya pergi ke properti referensi DLL ini di Visual Studio Solution Explorer, ini menunjukkan versi 4.2.0.1 yang direferensikan dari xxxxxx

Pertama, saya pikir Anda memiliki sedikit kesalahpahaman tentang DLL version dan the nuget version.

version 4.5.3 hanyalah versi paket nuget System.Threading.Tasks.Extensions number sedangkan version 4.2.0.1 hanya System.Threading.Tasks.Extensions.dll( ada di pacakge nuget) nomor. Mereka bukan konsep sama sekali. Dan Anda dapat melihat dll yang dirujuk dalam file xxx.csproj.

enter image description here

Versi paket nuget berisi beberapa DLLS yang bersaing untuk kerangka kerja proyek yang berbeda, yang akan secara otomatis diinstal ke dalam proyek yang sesuai sesuai dengan mekanisme nuget.

DLL hell - Tidak dapat memuat file atau perakitan System.Threading.Tasks.Extensions

Seperti yang Anda katakan, Anda memiliki paket nuget bernama System.Reactive version 4.3.2 yang bergantung pada System.Threading.Tasks.Extensions 4.5.3 dalam proyek Anda. Anda dapat melihat ini:

enter image description here

Dan dari log kesalahan Anda, tampaknya proyek tersebut mereferensikan System.Threading.Tasks.Extensions.dll 4.2.0.0 yang tidak ada dalam paket nuget System.Threading.Tasks.Extensions 4.5.3 dan seharusnya System.Threading.Tasks.Extensions.dll 4.2.0.1. Tidak yakin apakah Anda mengubah nomor versi atau alasan proyek.

Anda dapat memeriksa langkah-langkah ini:

Solusi

1) pastikan bahwa versi System.Threading.Tasks.Extensions adalah 4.5.3 dalam file packages.config.

2) pastikan Anda mengubah versi dll menjadi 4.2.0.1 di file xxx.csproj

3) Sebelum Anda menginstal ulang ini, harap bersihkan nuget cache terlebih dahulu, lalu jalankan update-Package -reinstall di bawah Tools-->Nuget Package Manager->Package Manager Console untuk menginstal ulang paket

4) buat proyek kerangka kerja 4.7.2 baru, lalu rujuk paket nuget ini untuk menguji apakah itu disebabkan oleh proyek Anda.

9
Perry Qian-MSFT 16 Maret 2020, 07:58