Derleme hatası: System.Runtime'a bir başvuru eklemelisiniz


209

Yepyeni bir ASP.NET MVC 5.1 çözümü hazırlıyorum. Bir grup NuGet paketine ekliyorum ve Zurb Foundation vb.

Bunun bir parçası olarak, bir Portatif Sınıf Kütüphanesi olan bir şirket içi NuGet paketine bir referans ekledim ve bunun yapı sunucusunda bir soruna neden olduğunu düşünüyorum.

TeamCity derlemede başarısız olur:

'System.Object' türü başvurulmayan bir derlemede tanımlanır. 'System.Runtime, Version = 4.0.0.0 derlemesine bir başvuru eklemelisiniz

Başlangıçta Razor web sayfalarını derlerken aynı veya benzer hata düzeltmesini ekledim, bu düzeltme web.config

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

Ancak sorun çözülmemiştir.

Yanıtlar:


216

Düzeltmeyi uygulamak için önce varsayılan olarak aşağıdaki gibi görünen mevcut web.config derleme bölümünü genişletin:

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

Genişletildikten sonra talimat verildiği gibi aşağıdaki yeni yapılandırma XML'sini ekledim:

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

Son web.config etiketleri şu şekilde görünmelidir:

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

2
Bu sorun, bilinen bir PCL değil, birçok nuGet paketi olan 4.52'yi hedefleyen bir MVC projesine girdi. VS2013'ün kaldırılmasının bunu tetiklediğine inanıyorum, ancak bunu aslında bilmiyorum. Yalnızca X-PagedList'e başvuran Views'da hata ortaya çıktı. Proje web.config dosyasına (web.config görünümlerini değil) başvuru eklenmesi sorunu çözdü.
Greg Terrell

1
@GregTerrell X.PagedList'in eski bir sürümünden yükseltme yaptıktan sonra bu sorunu yaşadım. Çok sinir bozucu. Başvuruyu eklemek işe yaradı, sonra yaptığım .vsproje kapatıldıktan sonra klasör silindi (yeniden adlandırıldı) , yeniden açıldı, web.configgirişi kaldırıldı ve şimdi oluşturuyor ve iyi çalışıyor.
Mardoxx

@Mardoxx Aynı sorunu yaşıyorum. VS veya X.PagedList ile ilgili sorun mu var? Bu bir VS hatasıysa, web.config dosyasını ekleyebilirim, ancak sorun X.PagedList ile ilgiliyse .config dosyalarını değiştirmek istemiyorum.
Jecoms

@ Jecoms Ben github sorununuzu yanıtladı :) github.com/kpi-ua/X.PagedList/issues/49#issuecomment-243515362
Mardoxx

3
MoreLINQ .Net 4.5.1 projeme yükledikten sonra bu hatayı aldım. Bu Yanıt çözdü.
Chris Moschini

125

Bu System.Runtime.dll derlemesine başvuru eklemek sorunu düzeltti:

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

Bu açık yoldaki dosya oluşturma sunucusunda mevcut olmasa da.

PCL ve bu Cepheler hakkında bazı belgeler bulduğumda daha fazla bilgi ile geri göndereceğim.

Güncelleme

Evet tüm internette cephe montajlarında hemen hemen hiçbir şey yok.

Google:

(Facades OR Facade) Portable Library site:microsoft.com

2
Dll dosyalarını belirtilen klasörde bulamazsanız, Windows SDK'yı açıklandığı gibi yükleyebilirsiniz: stackoverflow.com/a/14517992/3918598
user3918598

Teşekkürler. Yukarıdaki bağlantı 4.5.1 SDK yüklendikten sonra çalıştı.
Matt Beckman

40
Artık Microsoft Destek'te bu konuyu ele alan bir KB makalesi bulunmaktadır .
Peter Majeed

1
@PeterMajeed Bu yorumu gerçekten cevap olarak göndermelisiniz. Bahşiş için çok teşekkürler!
Temmuz

3
Çalışması için 'Yerel kopyala'
ayarını

28

Benim için işe yarayan tek yol. Derlemeyi web.config dosyasına ekleyin

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

1
Teşekkürler Lorena! Benim için çalıştı
Annia Martinez

tek astarlı çalışma, kütüphane yoluna bağlı değildir ve hiçbir şey kurmayı gerektirmez, kabul edilmelidir!)
Ivan Zverev

Bu cevap @Baahubali
Jesper Mygind

27

@ PeterMajeed'in kabul edilen cevaptaki yorumu bana ilgili bir sorunla yardımcı oldu. Taşınabilir kitaplığı kullanmıyorum, ancak TeamCity'yi çalıştırdığım yeni bir Windows Server 2012 yüklemesinde aynı derleme hatası var.

Microsoft .NET Framework 4.5.1 Developer Pack'i yüklemek sorunu çözdü ( MS Build Tools ayrı olarak kurulduktan sonra ).


5
4.6 ile ne yapılacağına dair bir fikrin var mı? Etrafta bir geliştirici paketi görmüyorum.
georgiosd

4
Hem 4.5.1 hem de 4.5.2 dev paketleri var ve hala bu hatayı alıyorum. Fikirler? 25 projemin hepsinde referans vermek istemiyorum. Bazı nedenlerden dolayı diğer 25 kişi bunu gerektirmez.
abatishchev

İyi sorular - 4.5.2 veya 4.6 ile henüz ilgilenmedim, en azından yapı otomasyonu açısından.
sfuqua

Gerçekten sıkışıp kalırsanız, ücretsiz Visual Studio Community Service Edition'ı her zaman açabilir ve güncel tutabilirsiniz.
Luke Puplett

Bu geliştirici paketlerinin neden yüklenmesi gerektiğini anlamıyorum. VS2013 Pro'yu kurdum. Bu yeterli değil mi? Ama sorunu burada çözdü. Teşekkürler.
Mike de Klerk

10

Bu sorunu VS 2015'teki bazı çözümlerde (MVC değil) ve hatta bir iş istasyonunda aynı çözümde yaşadım, ancak başka bir işte değil. Hatalar, .NET sürümü 4.6 olarak değiştirildikten ve PCL'ye başvurulduktan sonra ortaya çıktı.

Çözüm basit: Çözümü kapatın ve çözümle aynı klasördeki gizli .vs klasörünü silin .

Diğer yanıtlarda önerildiği gibi eksik referansların eklenmesi de sorunu çözer, ancak referansları tekrar kaldırdıktan sonra bile hata çözülmeye devam eder.

TeamCity'ye gelince, yapılandırmamın hiçbir zaman bir problemi olmadığı için söyleyemem. Ancak hata ayıklama çabanızın bir parçası olarak çalışma kataloğunu sıfırladığınızdan emin olun.


6

Bu eski bir sorun ama bugün sürekli entegrasyon sunucumuzda bir yapı hattı düzeltmek için karşı karşıya kaldım. Ekleme

<Reference Include="System.Runtime" />

benim .csprojdosyama benim için sorunu çözdü.

Biraz bağlam: ilgilenilen proje, geliştirme makinelerinde derleme sorunu olmayan tam bir .Net framework 4.6.1 projesidir. Sorun yalnızca kontrol edemediğimiz yapı sunucusunda farklı bir SDK sürümü veya benzer bir şeyden kaynaklanıyor olabilir.

Önerilen ekleme, Visual Studio'daki eksik referans uyarısı (referans ağacına eklenen girişte sarı üçgen) <Referencefiyatıyla derleme hatasını çözdü .

Umarım bu benzer senaryodaki insanlara yardımcı olabilir ...


Benim için de benzer bir bağlamda çözüldü
Nicola Celiento

3

Hedeflediğiniz .NET sürümü için .NET Çalışma Zamanı'nı ve hedefleme paketini yükleyin.

Geliştirici paketi sadece bu iki şey birlikte paketlenmiştir, ancak bugün itibariyle 4.6 sürümüne sahip görünmemektedir, bu nedenle iki öğeyi ayrı ayrı yüklemeniz gerekecektir.

İndirmeleri burada bulabilirsiniz: http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#


3

Ben de hata olmadan derlenmiş olsa bile, kod tabanımızı küçük bir güncellemeden sonra bir ASP .NET MVC projesi çalıştırmaya çalışırken bu sorunla karşı karşıya idi:

Derleyici Hata İletisi: CS0012: 'System.Object' türü başvurulan olmayan bir derlemede tanımlandı. 'System.Runtime, Sürüm = 4.0.0.0, Kültür = nötr, PublicKeyToken = b03f5f7f11d50a3a' derlemesine bir başvuru eklemeniz gerekir.

Projemiz hiçbir zaman bu sorunla karşılaşmamıştı, bu yüzden temel nedeni bulmadan önce yapılandırma dosyalarını değiştirme konusunda şüpheliydim. Hata günlüklerinden, gerçekten ne olduğuna işaret eden bu ayrıntılı derleyici çıktısını bulabildim:

uyarı CS1685: Önceden tanımlı 'System.Runtime.CompilerServices.ExtensionAttribute' türü, genel diğer adda birden çok derlemede tanımlanır; 'c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ mscorlib.dll' tanımını kullanarak

c: \ Users \ Admin \ Software Development \ source-control \ Binaries \ Publish \ WebApp \ Views \ Account \ Index.cshtml (35,20): hata CS0012: 'System.Object' türü, bir derlemede tanımlandı referans gösterilmedi. 'System.Runtime, Sürüm = 4.0.0.0, Kültür = nötr, PublicKeyToken = b03f5f7f11d50a3a' derlemesine bir başvuru eklemeniz gerekir.

c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Geçici ASP.NET Dosyaları \ meseems.webapp \ 68e2ea0f \ 8c5ee951 \ assembly \ dl3 \ 52ad4dac \ 84698469_3bb3d401 \ System.Collections.Immutable.DLL: (Sembolün yeri önceki hataya)

Görünüşe göre projemize eklenen yeni bir paket, .NET Framework'ün eski bir sürümüne atıfta bulunarak "çoklu montajlarda tanım" sorununa (CS1685) neden oluyordu ve bu da çalışma zamanında ustura görünümü derleyici hatasına yol açtı.

Uyumsuz paketi (System.Collections.Immutable.dll) kaldırdım ve sorun oluşmayı durdurdu. Ancak, projenizde paket kaldırılamazsa, Baahubali'nin cevabını denemeniz gerekecektir .


2

Tfs 2013 derleme sunucumuzda bir test projesinde aynı hatayla karşılaştım. .Net 4.5.1 üzerinde çalışan ana web projesi ile.

Sistem Çalışma Zamanı'nın bir nuGet paketini yükledim ve referansları \ System.Runtime.4.3.0 \ ref \ net462 \ System.Runtime.dll paketlerinden ekledim

Bu benim için çözdü.


.NET 4.6.2 DLL
dosyasını

1
.. ve yine benim için de işe yaradı. ... \ 45 \ ... klasöründe sadece bir saplama dosyası olduğundan beri başka seçenek yok _._
nathanchere



1

Bu sorunu bir Web API projesi ve birkaç kütüphane projesi ile bir çözümde yaşadım. Kütüphane projelerinden biri, Unity özniteliklerinin "geçerli" öznitelikler olmadığını söyleyen hatalarla derleme üzerinde çalışıyordu ve sonra bir hata System.Runtime'a başvurmam gerektiğini söyledi.

Çok arama yaptıktan sonra, 4.5.2 Developer Pack'i yeniden yükledikten ve hiçbir şey çalışmıyorsa, belki de sadece bir sürüm uyuşmazlığı olduğunu düşündüm. Bu yüzden her projenin özelliklerine baktım ve en temel kütüphanelerden biri 4.5'i, diğeri 4.5.2'yi hedefliyordu. Bunu da 4.5.2'yi hedefleyecek şekilde değiştirdim ve hatalar ortadan kalktı.


1

"C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5.1 \ Facades \ system.runtime.dll" dosyasını üretim sunucusunun bin klasörüne kopyalarım, bu sorunu çözer.


Başka bir yol, projede bu derleme başvuru eklemek ve Kopyala Yerel = True ayarlamaktır.
John Mc


0

Benim için sadece bu kod satırına yardımcı oldu:

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


-1

Nuget Paket Yöneticisi üzerinden referansı kaldırmak ve tekrar eklemek sorunu benim için çözdü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.