Visual Studio 2017 - tidak dapat memuat file atau rakitan 'System.Runtime, Version = 4.1.0.0' atau salah satu dependensinya


103

Saya menggunakan Visual Studio 2017 dan mencoba membuat pustaka .Net Standard 1.5 dan menggunakannya dalam proyek uji .Net 4.6.2 nUnit.

Saya mendapatkan kesalahan berikut ...

Tidak dapat memuat file atau rakitan 'System.Runtime, Version = 4.1.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' atau salah satu dependensinya. Sistem tidak dapat menemukan berkas yang dicari.

Saya telah mencoba yang berikut ini:

  1. Referensi perpustakaan Std sebagai referensi proyek. Kesalahan: memberi saya kesalahan sebelumnya.
  2. Buat pkg NuGet untuk perpustakaan Std saya dan rujuk itu. Kesalahan: Jenisnya adalah System.String, mengharapkan System.String. Ini karena System.Runtime akhirnya direferensikan oleh proyek dan memiliki definisi untuk semua tipe standar.
  3. Referensi NuGet pkg NetStandard.Library. Kesalahan: beri saya kesalahan yang sama dengan # ("Jenisnya adalah System.String, mengharapkan System.String"). CATATAN: Sebelum saya melakukan ini, saya menghapus SEMUA paket NuGet dari proyek dan kemudian menambahkan hanya paket nUnit dan NetStandard.Library (yang menginstal 45 paket lain).

Apakah ini bug? Apakah ada solusi? Bantuan apa pun dihargai.

Jawaban:


91

Saya memiliki masalah yang sama dan tidak ada solusi yang disarankan yang menurut saya berhasil. Solusi saya untuk masalah ini adalah: Periksa App.config dan packages.config untuk melihat apakah versinya cocok.

Awalnya app.config saya berisi:

<dependentAssembly>
  <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>

Tetapi package.config berisi:

<package id="System.Runtime" version="4.3.0" targetFramework="net461" requireReinstallation="true" />

Saya mengubah entri app.config agar cocok dengan packages.config untuk newVersion:

<dependentAssembly>
  <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.3.0" />
</dependentAssembly>

Setelah perubahan, masalah teratasi.


Atau cukup tambahkan referensi ke web.config Anda: stackoverflow.com/a/38603514/1145177
Doug S

7
Saya menarik "4.3.0" dari NuGet tetapi untuk beberapa alasan VS bersikeras bahwa saya merujuk "4.1.2.0", pekerjaan serupa hanya dengan nomor versi yang berbeda berhasil untuk saya ...
David Rogers

Saya memiliki masalah yang sama seperti @DavidRogers dalam proyek MSTest. Mengonsolidasi perbedaan antara app.config dan packages.config menyelesaikan masalah.
Oktoat

ya terima kasih banyak ! Ini adalah solusi untuk MSTest saya tidak menemukan tes [MSTest][Discovery] Failed to discover tests from assembly Reason:Could not load file or assembly 'System.Reflection, Version=4.1.1.0 etc
Dan M

Solusi berhasil untuk saya. Masalah dimulai setelah menginstal HtmlAgilityPack NUGET. Dan tidak akan berjalan karena info versi yang salah dalam paket. +1
Roberto

35

Masalah ini terjadi saat Anda mereferensikan proyek .NET Standard dari proyek .NET 4.x: tidak ada referensi paket nuget proyek .NET Standard yang dibawa sebagai dependensi.

Untuk memperbaikinya, Anda perlu memastikan file csproj .NET 4.x Anda mengarah ke alat build saat ini (setidaknya 14):

<Project ToolsVersion="15.0">...

Di bawah ini seharusnya tidak lagi diperlukan, sudah diperbaiki sekitar VS 15.3:

Ada bug yang diketahui di VS2017, khususnya di NuGet 4.0.

Untuk mengatasi bug tersebut, Anda harus membuka file .csproj untuk proyek .NET 4.x Anda dan menambahkan cuplikan ini:

<ItemGroup>
  <PackageReference Include="Legacy2CPSWorkaround" Version="1.0.0">
    <PrivateAssets>All</PrivateAssets>
  </PackageReference>
</ItemGroup>

NuGet 4.x membawa serta "referensi paket" - tidak ada lagi paket.config - tetapi pipeline 4.x lama tidak diperbarui sepenuhnya pada saat peluncuran VS2017. Cuplikan di atas tampaknya "membangunkan" sistem build untuk menyertakan referensi paket dari dependensi dengan benar.


Pembaruan Visual Studio 17 mana? Bisakah Anda menentukan versinya?
Ronak Agrawal

11
Saya masih memiliki masalah di 15.5.5 VS2017. Sepertinya ada penyebab lain.
SerG

Pertanyaan: apakah proyek .NET 4.x Anda menggunakan referensi paket, atau masih menggunakan packages.config? Saya bertanya-tanya apakah alasan mengapa ini tampak diperbaiki bagi saya adalah karena saya telah menyingkirkan packages.config.
Cory Nelson

2
Perlu dicatat bahwa Visual Studio 2017 Versi 15.7 dan yang lebih baru mendukung migrasi proyek dari format manajemen packages.config ke format PackageReference. docs.microsoft.com/en-us/nuget/reference/…
tenang tarn

@tranquiltarn dari tautan Anda: "Migrasi saat ini tidak tersedia untuk proyek C ++ dan ASP.NET."
JP Hellemons

34

Saya mengalami masalah ini baru-baru ini dan saya mencoba banyak hal yang disebutkan di utas ini dan lainnya. Saya menambahkan referensi paket untuk "System.Runtime"oleh manajer paket nuget, memperbaiki perintah pengikatan app.config, dan memastikan bahwa app.configdan package.configmemiliki versi yang sama untuk perakitan. Namun, masalahnya tetap ada.

Akhirnya, saya menghapus <dependentAssembly>tag untuk perakitan dan masalah menghilang. Jadi, coba hapus yang berikut ini di app.config.

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.1.0" />
</dependentAssembly>

Sunting: Setelah saya memperbarui .NET framework ke 4.7.2, masalah muncul kembali. Saya mencoba trik di atas tetapi tidak berhasil. Setelah membuang waktu berjam-jam, saya menyadari masalahnya terjadi karena System.Linqreferensi lama di app.config. Oleh karena itu, hapus atau perbarui semua referensi Linq juga untuk menghilangkan masalah ini.


4
Setiap kali saya mengalami masalah yang ditentukan oleh OP, saya menghapus informasi System.Runtime di file .config dan ini menyelesaikannya. Saya setuju dengan Anda bahwa ini adalah solusi valid yang potensial. Itu cenderung terjadi pada saya ketika saya menambahkan paket dari nuget.
Wallace B. McClure

Bekerja untuk saya. Saya mendapat kesalahan xunit System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=4.1.2.0setelah meningkatkan proyek saya ke 4.7.2
Anton Krouglov

Berdasarkan jawaban Anda, saya memeriksa paket nuget saya dan menemukan kebutuhan 'Google.protobuf' (Konsolidasi) antara proyek saya, thnx
Osama_Almaani

28

Percayalah, saya tidak bercanda. Hapus semua dependensi System.Runtime dari app.config Anda dan itu akan mulai berfungsi.


9
Penjelasan yang lebih baik tentang mengapa ini berhasil akan sangat membantu.
Dour High Arch

Masalah dengan metode ini adalah, setiap kali Anda memperbarui paket nuget apa pun atau menambahkan paket nuget baru, itu akan ditambahkan lagi.
Getar

16

Saya mengatasi kesalahan itu dengan mereferensikan NetStandard.Library dan File app.config berikut di NUnit-Project.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.1.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

Edit

Jika ada selain System.Runtime, System.Reflectionatau System.Runtime.InteropServiceshilang (misalnya System.Linq), maka tambahkan saja dependentAssemblynode baru .

Edit 2

Dalam Versi Visual Studio baru (2017 15.8 saya pikir) mungkin Studio membuat File app.config. Cukup centang kotak centang Auto-generate binding redirects di Project-Properties - Application . Buat pengalihan binding secara otomatis

Edit 3

Pengalihan pengikatan yang dibuat secara otomatis tidak bekerja dengan baik dengan Perpustakaan Kelas .NET. Menambahkan baris berikut ke file csproj menyelesaikan ini dan file .config yang berfungsi untuk Classlibary akan dibuat.

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

11
Anehnya, saya memperbaiki masalah saya dengan menghapus semua <dependentAssembly>node untuk System.Runtime ..
Matt Brewerton

@MattBrewerton sudah dikonfirmasi!
Bart De Boeck

13

Saya memperbaikinya dengan menghapus app.configdengan

<assemblyIdentity name="System.Runtime" ....> 

entri.

app.config ditambahkan secara otomatis (tetapi tidak diperlukan) selama pemfaktoran ulang


Ini berhasil untuk saya! Pasti coba ini jika semua item lain tidak berhasil untuk Anda
bOkeifus

3

Masalah ini terjadi saat Anda mereferensikan proyek .NET Standard dari proyek .NET 4.x: tidak ada referensi paket nuget proyek .NET Standard yang dibawa sebagai dependensi.

Saya menyelesaikannya dengan menambahkan 4.3paket System.Runtime dan NETStandard.Library dan !! penting !! Saya menggunakan alat refactor untuk mencari versi System.Runtime.dll, 4.1.1.1bukan 4.3dan kemudian menambahkan bindingRedirect di .config

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="4.1.1.1" />
</dependentAssembly>

3

sudah terlambat saya tahu, namun tidak ada jawaban yang berhasil. Saya menemukan jawabannya dari situs web lain. Saya memperbaiki masalah ketika saya menghapus ketergantungan perakitan System.Runtime. Saya menghapus ini.

<dependentAssembly> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/> </dependentAssembly>

Salam Hormat


2

Saya memiliki masalah dengan ini di proyek NUnit 2.6.4 yang menargetkan kerangka dotnet 4.6.2. Saya mengalami System.Runtime FileNotFoundkesalahan itu saat mencoba menggunakan Humanizer .

Saya memperbaiki kesalahan saya dengan menginstal NetStandard.Library ke dalam proyek pengujian unit saya.


2

Kami telah menemukan bahwa AutoGenerateBindingRedirectsmungkin menyebabkan masalah ini.

Teramati: penargetan proyek yang sama net45dan netstandard1.5berhasil dibangun di satu mesin dan gagal membangun di yang lain. Mesin memiliki versi berbeda dari kerangka kerja yang diinstal (4.6.1 - berhasil dan 4.7.1 - gagal). Setelah meningkatkan framework pada mesin pertama ke 4.7.1, build juga gagal.

Error Message:
 System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
  ----> System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

Auto binding redirectsadalah fitur dari .net 4.5.1. Setiap kali nuget mendeteksi bahwa proyek secara transitif mereferensikan versi yang berbeda dari rakitan yang sama, nuget akan secara otomatis menghasilkan file konfigurasi di direktori keluaran yang mengarahkan semua versi ke versi tertinggi yang diperlukan.

Dalam kasus kami, pengikatan ulang semua versi System.Runtimemenjadi Version=4.1.0.0. .net 4.7.1dikirimkan dengan 4.3.0.0versi runtime. Jadi, pengikatan pengalihan adalah pemetaan ke versi yang tidak tersedia dalam versi kerangka kerja kontemporer.

Masalahnya telah diperbaiki dengan menonaktifkan pengalihan pengikatan otomatis untuk target 4.5 dan membiarkannya hanya untuk inti .net.

<PropertyGroup Condition="'$(TargetFramework)' == 'net45'">
  <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
</PropertyGroup>

2

Masalah ini memiliki banyak penyebab ... dalam kasus saya masalahnya adalah yang ada di web saya.config tag menambahkan perakitan System.Runtime:

<assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>

tetapi satu paket juga menambahkan perakitan yang sama sebagai ketergantungan dengan versi lain:

<package id="System.Runtime" version="4.3.0" targetFramework="net47" />

menghapus tag "tambahkan perakitan" dari web.config saya menyelesaikan masalah.


2

Sepertinya masalah ini disebabkan ketika ada konflik versi antara packages.config dan app.config. Di app.config Anda memiliki pengalihan pengikatan assembly yang secara otomatis dihasilkan oleh hal yang disebut "AutoGenerateBindingRedirects". Ketika diaktifkan setiap kali Anda mengunduh paket nuget, itu akan, selain membuat entri baru di packages.config, menambahkan informasi pengalihan mengikat ini ke app.config, apa tujuannya dijelaskan di sini: Pengalihan Pengikatan Majelis: Bagaimana dan Mengapa?

Di sana Anda dapat membaca apa yang ditulis pengguna @Evk:

Mengapa pengalihan yang mengikat diperlukan? Misalkan Anda memiliki aplikasi A yang mereferensikan library B, dan juga library C versi 1.1.2.5. Library B pada gilirannya juga mereferensikan library C, tetapi dari versi 1.1.1.0. Sekarang kami mengalami konflik, karena Anda tidak dapat memuat versi berbeda dari rakitan yang sama saat runtime. Untuk menyelesaikan konflik ini, Anda mungkin menggunakan pengalihan binding, biasanya ke versi baru

Jadi, PERBAIKAN CEPAT: Hapus semua entri di app.config.

Dalam kasus saya, hanya dengan melakukan program itu mulai bekerja, tetapi mungkin hanya akan berfungsi jika Anda tidak memiliki konflik versi dari rakitan yang sama saat runtime.

Jika Anda memiliki konflik seperti itu, Anda harus memperbaiki nomor versi ini di app.config agar sesuai dengan versi rakitan yang benar-benar digunakan, tetapi proses manual itu menyakitkan, jadi saya sarankan untuk membuatnya secara otomatis lagi dengan membuka Konsol Pengelola Paket dan melakukan penginstalan ulang paket dengan mengetik Update-Package -reinstall


1

Saya berakhir dalam situasi ini beberapa kali dengan situs web .NET 4.6.1 saya. Saya membuat masalah setiap kali saya menambahkan referensi ke proyek .NET Core terpisah. Setelah membangun, Visual Studio dengan benar memberitahu saya bahwa referensi lintas kerangka tersebut tidak valid, dan saya segera menghapus referensi proyek tersebut. Proyek dibangun dengan baik setelah itu, tetapi kesalahan System.Runtime muncul saat mengakses situs web dan menolak untuk pergi.

Perbaikannya setiap kali timpang tetapi efektif: Saya menghapus direktori proyek dan mengunduhnya kembali dari kontrol sumber. Meskipun tidak ada perbedaan antara sebelum dan sesudah, saya dapat membangun proyek dan mengakses halaman tanpa keluhan.


1

Mengalami ini sekarang di proyek Unit Test setelah menambahkan MsTest V2 melalui Nuget. Mengganti nama app.config (menghapusnya dengan sangat efektif) berhasil bagi saya.

Setelah membaca semua posting di atas, saya masih tidak yakin mengapa, maaf!


1

Saya memperbaiki masalah dengan menghapus Paket Nuget System.Runtimedan menginstalnya kembali


1

Ke app.config atau web.config tambahkan

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>

1

Saya punya proyek dengan masalah yang sama, saya menyelesaikannya dengan mengubah versi inti dotnet dari 2.2 ke 2.0, Jika masalah Anda tetap ada, Coba solusi ini


1

Sebelum menjalankan pengujian unit, hapus saja tag runtime dari file app.config. Masalah akan terpecahkan.


0

Saya memiliki masalah serupa di VS 2017 15.45 - Saya menemukan ketika saya memeriksa bahwa meskipun proyek dikompilasi dan menjalankannya muncul dengan system.IO.FileNotFoundException berkenaan dengan System.Runtime ketika saya mencoba mengakses objek TPL Dataflow.

Ketika saya memeriksa proyek dalam solusi, salah satunya (yang teratas) tidak memiliki paket System.Runtime yang digunakan oleh proyek yang mendasarinya. Setelah saya menginstalnya dari Nuget, semuanya bekerja dengan benar.


0

Saya mencoba semua solusi di sini, tetapi tidak berhasil. Akhirnya, saya menyelesaikannya dengan membuka file csproj baru dan secara manual menambahkan bagian berikut:

<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
</Reference>

0

Saya menggunakan ASP.Net CORE 2.1 dan saya mendapatkan kesalahan ini ketika saya menjalankan dengan memilih .csproj dari daftar sekitar 40 di repo besar. Ketika saya membuka file csproj satu per satu, kesalahan telah teratasi. Sesuatu dengan bagaimana program diluncurkan berbeda ketika csproj dibuka.


0

Saya mengatasi masalah ini dengan beralih dari .NET 4.7.2 => .NET 4.5.2 dan kemudian beralih kembali ke 472. Jadi dalam beberapa kasus, kesalahan ini terjadi karena manajer paket tidak dapat menyelesaikan ketergantungan


0

Jika sebelumnya berfungsi, maka harus ada perubahan App.config. Urungkan App.config berhasil untuk saya.


0

Saya juga telah melalui kesalahan ini dan membagikan bagaimana saya menyingkirkannya.

Dalam kasus saya, baris di bawah ini ada di web.config dari proyek webapi tetapi tidak ada referensi paket di file package.config.

Kode di Web.config di Proyek Webapi

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.3.0" />
</dependentAssembly>

Kode I Ditambahkan dalam file packages.config dalam proyek api web Sebelum menutup elemen.

<package id="System.Runtime" version="4.3.0" targetFramework="net461" />

Solusi Lain Berhasil dalam Kasus Saya:

Tentu singkat lain yang dapat berfungsi jika Anda menyalin proyek ke sistem Komputer lain yang mungkin memiliki versi paket yang sedikit berbeda sehingga Anda dapat mencoba mengubah versi rakitan ke versi yang diberikan dalam kesalahan di situs web / webapi saat Anda menjalankannya. Seperti dalam kasus ini seperti yang diberikan dalam pertanyaan Versi yang dibutuhkan adalah '4.1.0.0' jadi cukup coba ubah versi saat ini di web.config ke versi yang ditunjukkan dalam kesalahan seperti di bawah ini

Kesalahan:

Could not load file or assembly 'System.Runtime, Version=4.1.0.0' or one of its dependencies

Versi Ganti


0

Saya mengalami kesalahan ini ketika membangun Fungsi Azure (dengan pemicu antrian, jika itu membuat perbedaan)

Masalah dalam kasus ini adalah karena AzureFunctionsVersiondisetel ke v2, bukan v3. Untuk memperbaruinya melalui VS2019, keluarkan proyek lalu edit file csproj. Di dalam PropertyGroupnode, tambahkan / edit berikut ini:

<PropertyGroup>
  <AzureFunctionsVersion>v3</AzureFunctionsVersion>
</PropertyGroup>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.