Galat build: Anda harus menambahkan referensi ke System.Runtime

209

Saya sedang menyiapkan solusi ASP.NET MVC 5.1 baru. Saya menambahkan banyak paket NuGet dan mengaturnya dengan Zurb Foundation dll.

Sebagai bagian dari itu, saya telah menambahkan referensi ke paket NuGet in-house yang merupakan Perpustakaan Kelas Portable dan saya pikir ini menyebabkan masalah pada server build.

TeamCity gagal membangun dengan:

Jenis 'System.Object' didefinisikan dalam rakitan yang tidak dirujuk. Anda harus menambahkan referensi ke System.Runtime assembly, Versi = 4.0.0.0

Saya awalnya menambahkan perbaikan untuk kesalahan yang sama atau serupa ketika mengkompilasi halaman web Razor, yang memperbaiki berada di web.config

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

Namun masalah ini belum terselesaikan.

Luke Puplett
sumber

Jawaban:

216

Untuk menerapkan perbaikan, pertama-tama perluas bagian kompilasi web.config yang sudah ada yang terlihat seperti ini secara default:

<compilation debug="true" targetFramework="4.5"/>

Setelah diperluas saya kemudian menambahkan konfigurasi XML baru berikut ini seperti yang diperintahkan kepada saya:

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

Tag web.config terakhir akan terlihat seperti ini:

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>
Baahubali
sumber
2
Masalah ini merambah ke proyek MVC yang menargetkan 4,52, tidak ada PCL yang dikenal tetapi banyak paket nuGet. Saya percaya bahwa menghapus VS2013 memicu ini tetapi saya tidak tahu itu sebagai fakta. Kesalahan hanya muncul di Tampilan yang mereferensikan X-PagedList. Menambahkan referensi ke web.config proyek (bukan tampilan web.config) memperbaikinya.
Greg Terrell
1
@GregTerrell Saya baru saja mengalami masalah ini setelah memutakhirkan dari versi lama X.PagedList. Sangat membuat frustrasi. Menambahkan referensi berhasil, maka apa yang saya lakukan adalah menghapus (mengganti nama) .vsfolder setelah menutup proyek, membukanya kembali, menghapus web.configentri dan sekarang ia membangun dan berjalan dengan baik.
Mardoxx
@ Martoxx Saya sudah mengalami masalah yang sama. Apakah masalah dengan VS atau X.PagedList? Jika itu adalah bug VS, saya bisa menambal web.config, tapi saya tidak ingin mengubah file .config jika masalahnya ada pada X.PagedList.
Jecoms
@Jecoms Saya membalas masalah github Anda :) github.com/kpi-ua/X.PagedList/issues/49#issuecomment-243515362
Mardoxx
3
Mendapat kesalahan ini setelah menginstal MoreLINQ ke proyek .Net 4.5.1 saya. Jawaban ini menyelesaikannya.
Chris Moschini
125

Menambahkan referensi ke rakitan System.Runtime.dll ini memperbaiki masalah:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\System.Runtime.dll

Meskipun file di jalur eksplisit itu tidak ada di server build.

Saya akan mengirim kembali dengan informasi lebih lanjut setelah saya menemukan beberapa dokumentasi di PCL dan Fasad-fasad ini.

Memperbarui

Ya hampir tidak ada di majelis fasad di seluruh internet.

Google:

(Facades OR Facade) Portable Library site:microsoft.com
Luke Puplett
sumber
2
Jika Anda tidak dapat menemukan file dll di folder yang ditentukan, Anda dapat menginstal Windows SDK seperti yang dijelaskan: stackoverflow.com/a/14517992/3918598
user3918598
Terima kasih. Tautan di atas berfungsi setelah menginstal 4.5.1 SDK.
Matt Beckman
40
Sekarang ada artikel KB tentang Dukungan Microsoft yang membahas hal ini.
Peter Majeed
1
@PeterMajeed Anda harus benar-benar memposting komentar itu sebagai jawabannya di sini. Terima kasih banyak atas tipnya!
julealgon
3
Saya harus mengatur 'Salin lokal' menjadi true untuk membuatnya berfungsi
Phate01
28

Satu-satunya cara yang berhasil bagi saya. Tambahkan rakitan ke web.config

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>
Lorena Pita
sumber
1
Lorena terima kasih! Bekerja untuk saya
Annia Martinez
bekerja satu-liner, tidak bergantung pada jalur ke perpustakaan dan tidak perlu menginstal apa pun, harus diterima!)
Ivan Zverev
Jawaban ini sama dengan jawaban terpilih teratas oleh @ Baahubali
Jesper Mygind
27

Komentar @ PeterMajeed dalam jawaban yang diterima membantu saya keluar dengan masalah terkait. Saya tidak menggunakan perpustakaan portabel, tetapi memiliki galat build yang sama pada instalasi Windows Server 2012 yang baru, tempat saya menjalankan TeamCity.

Menginstal Microsoft .NET Framework 4.5.1 Paket Pengembang menangani masalah ini (setelah secara terpisah menginstal MS Build Tools ).

sfuqua
sumber
5
Ada ide apa yang harus dilakukan dengan 4.6? Saya tidak melihat paket pengembang.
georgiosd
4
Saya memiliki paket dev 4.5.1 dan 4.5.2 dan masih mendapatkan kesalahan ini. Ide ide? Saya tidak ingin referensi di semua 25 proyek saya. Dengan beberapa alasan, 25 lainnya tidak memerlukannya.
abatishchev
Pertanyaan bagus - Saya belum berurusan dengan 4.5.2 atau 4.6, setidaknya dari sudut pandang otomatisasi pembuatan.
sfuqua
Saya kira jika Anda benar-benar macet, Anda selalu dapat mengaktifkan Edisi Layanan Komunitas Visual Studio gratis dan tetap mutakhir.
Luke Puplett
Saya tidak mengerti mengapa paket pengembang ini harus diinstal. Saya menginstal VS2013 Pro. Bukankah itu cukup? Tapi itu menyelesaikan masalah di sini. Terima kasih.
Mike de Klerk
10

Saya punya masalah ini dalam beberapa solusi pada VS 2015 (bukan MVC sekalipun), dan bahkan dalam solusi yang sama pada satu workstation tetapi tidak pada yang lain. Kesalahan mulai muncul setelah mengubah versi .NET ke 4.6 dan merujuk PCL.

Solusinya sederhana: Tutup solusi dan hapus folder .vs tersembunyi di folder yang sama dengan solusinya.

Menambahkan referensi yang hilang seperti yang disarankan dalam jawaban lain juga menyelesaikan masalah, tetapi kesalahan tetap diselesaikan bahkan setelah Anda menghapus referensi lagi.

Adapun TeamCity, saya tidak bisa mengatakan karena konfigurasi saya tidak pernah punya masalah. Tetapi pastikan Anda mereset katalog kerja sebagai bagian dari upaya debugging Anda.

wezzix
sumber
6

Ini masalah lama tapi saya hadapi hari ini untuk memperbaiki saluran pipa di server integrasi berkesinambungan kami. Menambahkan

<Reference Include="System.Runtime" />

ke .csprojfile saya memecahkan masalah bagi saya.

Sedikit konteks: proyek tertarik adalah proyek .Net framework 4.6.1 penuh, tanpa membangun masalah pada mesin pengembangan. Masalahnya hanya muncul pada server build, yang tidak dapat kami kontrol, mungkin karena versi SDK yang berbeda atau yang serupa.

Menambahkan yang diusulkan <Referencememecahkan kesalahan build, dengan harga peringatan referensi yang hilang (segitiga kuning pada entri yang ditambahkan di pohon referensi) di Visual Studio.

Saya harap ini dapat membantu orang dalam skenario serupa ...

Pietro Martinelli
sumber
Dipecahkan untuk saya juga, dalam konteks yang sama
Nicola Celiento
3

Instal .NET Runtime serta paket penargetan untuk versi .NET yang Anda targetkan.

Paket pengembang hanyalah dua hal ini yang digabungkan bersama tetapi hingga hari ini sepertinya tidak memiliki versi 4.6 sehingga Anda harus menginstal kedua item secara terpisah.

Unduhan dapat ditemukan di sini: http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#

Oenotria
sumber
3

Saya juga menghadapi masalah ini mencoba menjalankan proyek ASP .NET MVC proyek setelah pembaruan kecil untuk basis kode kami, meskipun dikompilasi tanpa kesalahan:

Pesan Kesalahan Kompiler: CS0012: Jenis 'System.Object' didefinisikan dalam majelis yang tidak dirujuk. Anda harus menambahkan referensi ke assembly 'System.Runtime, Versi = 4.0.0.0, Culture = netral, PublicKeyToken = b03f5f7f11d50a3a'.

Proyek kami tidak pernah mengalami masalah ini, jadi saya ragu untuk mengubah file konfigurasi sebelum mencari tahu akar masalahnya. Dari log kesalahan saya dapat menemukan output kompiler terperinci ini yang menunjukkan apa yang sebenarnya terjadi:

peringatan CS1685: Jenis yang telah ditentukan 'System.Runtime.CompilerServices.ExtensionAttribute' didefinisikan dalam banyak majelis di alias global; menggunakan definisi dari 'c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ mscorlib.dll'

c: \ Users \ Admin \ Pengembangan Perangkat Lunak \ source-control \ Binaries \ Publikasikan \ WebApp \ Views \ Account \ Index.cshtml (35,20): kesalahan CS0012: Jenis 'System.Object' didefinisikan dalam majelis yang tidak dirujuk. Anda harus menambahkan referensi ke assembly 'System.Runtime, Versi = 4.0.0.0, Culture = netral, PublicKeyToken = b03f5f7f11d50a3a'.

c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ File ASP.NET Sementara \ meseems.webapp \ 68e2ea0f \ 8c5ee951 \ assembly \ dl3 \ 52ad4dac \ 84698469_3bb3d401 \ System.Collections.Immutable.DLL: (Lokasi simbol terkait. untuk kesalahan sebelumnya)

Rupanya paket baru yang ditambahkan ke proyek kami merujuk pada versi yang lebih lama dari .NET Framework, menyebabkan masalah "definisi di banyak majelis" (CS1685), yang menyebabkan kesalahan kompilator tampilan silet saat runtime.

Saya menghapus paket yang tidak kompatibel (System.Collections.Immutable.dll) dan masalah berhenti terjadi. Namun, jika paket tidak dapat dihapus dalam proyek Anda, Anda perlu mencoba jawaban Baahubali .

Thomas CG de Vilhena
sumber
2

Pada server build Tfs 2013 kami, saya memiliki kesalahan yang sama, dalam proyek uji. dengan proyek web utama berjalan di .Net 4.5.1.

Saya menginstal paket nuGet dari System Runtime dan menambahkan referensi dari paket \ System.Runtime.4.3.0 \ ref \ net462 \ System.Runtime.dll

Itu menyelesaikannya untuk saya.

Bob Lokerse
sumber
Itu mungkin tidak akan berhasil karena Anda menyuruhnya untuk menggunakan .NET 4.6.2 DLL dengan proyek .NET 4.5.1
Chris Marisic
1
.. namun itu berhasil, bagi saya juga. Tidak ada pilihan karena folder ... \ 45 \ ... hanya memiliki file rintisan di dalamnya yang disebut _._
nathanchere
2

saya menambahkan System.Runtime.dll ke proyek bin dan berhasil :)

Abdullah Tahan
sumber
1

Saya punya masalah ini dalam solusi dengan proyek Web API dan beberapa proyek perpustakaan. Salah satu proyek perpustakaan borking on build, dengan kesalahan yang mengatakan atribut Unity bukan atribut "valid", dan kemudian satu kesalahan mengatakan saya perlu referensi System.Runtime.

Setelah banyak mencari, menginstal ulang Paket Pengembang 4.5.2, dan tidak ada yang berhasil, saya pikir mungkin itu hanya ketidakcocokan versi. Jadi saya melihat properti dari setiap proyek, dan salah satu pustaka yang paling dasar menargetkan 4,5 sedangkan yang lainnya menargetkan 4,5.2. Saya mengubah yang juga menargetkan 4.5.2 dan kesalahan hilang.

sliderhouserules
sumber
1

Saya menyalin file "C: \ Program Files (x86) \ Assemblies Referensi \ Microsoft \ Framework.NETFramework \ v4.5.1 \ Facades \ system.runtime.dll" ke folder bin server produksi, ini menyelesaikan masalah.

Tomluke
sumber
Cara lain adalah dengan menambahkan referensi ke majelis ini dalam proyek dan mengatur Salin Lokal = Benar.
John Mc
0

instal https://www.microsoft.com/en-us/download/details.aspx?id=49978 Microsoft .NET Framework 4.6.1 Paket Pengembang dan tambahkan baris kode ini dalam file Web.config

<compilation debug="true" targetFramework="4.5">
          <assemblies>
            <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
          </assemblies>
        </compilation>
Muhammad Armaghan
sumber
0

Bagi saya hanya membantu baris kode ini:

Assembly.Load("System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");

Balabam
sumber
-1

Menghapus referensi pada Package Manager Nuget dan menambahkannya kembali memecahkan masalah bagi saya.

Stefan
sumber