Błąd kompilacji: Musisz dodać odwołanie do System.Runtime


209

Przygotowuję zupełnie nowe rozwiązanie ASP.NET MVC 5.1. Dodaję kilka pakietów NuGet i konfiguruję je w Zurb Foundation itp.

W ramach tego dodałem odwołanie do wewnętrznego pakietu NuGet, który jest Przenośną biblioteką klas i myślę, że powoduje to problem na serwerze kompilacji.

TeamCity kończy się niepowodzeniem z:

Typ „System.Object” jest zdefiniowany w zestawie, do którego nie ma odniesienia. Musisz dodać odwołanie do zestawu „System.Runtime, wersja = 4.0.0.0

Pierwotnie dodałem poprawkę dla tego samego lub podobnego błędu podczas kompilacji stron internetowych Razora, która to poprawka znajduje się w web.config

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

Jednak problem nie został rozwiązany.

Odpowiedzi:


216

Aby wdrożyć poprawkę, najpierw rozwiń istniejącą sekcję kompilacji web.config, która domyślnie wygląda następująco:

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

Po rozwinięciu dodałem następujący nowy plik XML konfiguracji zgodnie z instrukcją:

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

Końcowe tagi web.config powinny wyglądać tak:

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

2
Ten problem wkradł się do projektu MVC ukierunkowanego na 4.52, nie znanego PCL, ale wiele pakietów nuGet. Wierzę, że odinstalowanie VS2013 spowodowało to, ale nie wiem tego jako faktu. Wystąpił błąd tylko w widokach, które odwoływały się do X-PagedList. Dodanie odwołania do projektu web.config (nie widoki web.config) naprawiło to.
Greg Terrell,

1
@GregTerrell Właśnie miałem ten dokładny problem po aktualizacji ze starej wersji X.PagedList. Bardzo frustrujące. Dodanie referencji zadziałało, a następnie to, co zrobiłem .vs, usunąłem (zmieniłem nazwę) folder po zamknięciu projektu, otworzyłem go ponownie, usunąłem web.configwpis, a teraz kompiluje się i działa poprawnie.
Mardoxx,

@Mardoxx Mam ten sam problem. Czy problem dotyczy VS lub X.PagedList? Jeśli jest to błąd VS, mogę załatać web.config, ale nie chcę zmieniać plików .config, jeśli problem dotyczy X.PagedList.
Jecoms

@Jecoms Odpowiedziałem na twój problem z githubem
Mardoxx

3
Wystąpił ten błąd po zainstalowaniu MoreLINQ w moim projekcie .Net 4.5.1. Ta odpowiedź rozwiązała ten problem.
Chris Moschini,

125

Dodanie odwołania do tego zestawu System.Runtime.dll naprawiło problem:

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

Chociaż ten plik w tej jawnej ścieżce nie istnieje na serwerze kompilacji.

Odpowiem więcej informacji, gdy tylko znajdę dokumentację na temat PCL i tych fasad.

Aktualizacja

Tak, właściwie nic na temat zespołów fasad w całym Internecie.

Google:

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

2
Jeśli nie możesz znaleźć plików DLL w określonym folderze, możesz zainstalować
zestaw

Dzięki. Powyższy link działał po zainstalowaniu zestawu SDK 4.5.1.
Matt Beckman,

40
Jest teraz artykuł KB na temat pomocy technicznej Microsoft, który rozwiązuje ten problem.
Peter Majeed,

1
@PeterMajeed Naprawdę powinieneś opublikować ten komentarz jako odpowiedź tutaj. Bardzo dziękuję za wskazówkę!
julealgon

3
Musiałem ustawić „Kopiuj lokalnie” na „prawda”, aby zadziałało
Phate01

28

Jedyny sposób, który dla mnie zadziałał. Dodaj zespół do pliku web.config

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

1
Dzięki Lorena! Pracowałem dla mnie
Annia Martinez,

działający one-liner, nie zależy od ścieżki do biblioteki i nie wymaga niczego instalować, powinien zostać zaakceptowany!)
Ivan Zverev

Ta odpowiedź jest taka sama jak najczęściej głosowana odpowiedź @Baahubali
Jesper Mygind

27

@ Komentarz PeterMajeeda w zaakceptowanej odpowiedzi pomógł mi z powiązanym problemem. Nie używam przenośnej biblioteki, ale mam ten sam błąd kompilacji w nowej instalacji systemu Windows Server 2012, na której uruchamiam TeamCity.

Zainstalowanie pakietu Microsoft .NET Framework 4.5.1 Developer Pack rozwiązało problem (po osobnym zainstalowaniu narzędzi do kompilacji MS ).


5
Jakieś pomysły na to, co zrobić z 4.6? Nie widzę w pobliżu pakietu programisty.
georgiosd

4
Mam zarówno pakiety deweloperskie 4.5.1, jak i 4.5.2 i nadal pojawia się ten błąd. Pomysły? Nie chcę się do tego odwoływać we wszystkich moich 25 projektach. Z jakichś powodów inne 25 tego nie wymaga.
abatishchev

Dobre pytania - jeszcze nie miałem do czynienia z 4.5.2 ani 4.6, przynajmniej z punktu widzenia automatyzacji kompilacji.
sfuqua

Wydaje mi się, że jeśli naprawdę utkniesz, zawsze możesz zainstalować bezpłatną wersję Visual Studio Community Service Edition i aktualizować ją.
Luke Puplett

Nie rozumiem, dlaczego te pakiety programistów muszą być zainstalowane. Zainstalowałem VS2013 Pro. Czy to nie wystarczy? Ale to rozwiązało problem tutaj. Dzięki.
Mike de Klerk

10

Miałem ten problem w niektórych rozwiązaniach VS 2015 (choć nie w MVC), a nawet w tym samym rozwiązaniu na jednej stacji roboczej, ale nie na innej. Błędy zaczęły się pojawiać po zmianie wersji .NET na 4.6 i odwoływaniu się do PCL.

Rozwiązanie jest proste: zamknij rozwiązanie i usuń ukryty folder .vs w tym samym folderze co rozwiązanie.

Dodanie brakujących referencji, jak sugerowano w innych odpowiedziach, również rozwiązuje problem, ale błąd pozostaje rozwiązany nawet po ponownym usunięciu referencji.

Co do TeamCity, nie mogę powiedzieć, ponieważ moja konfiguracja nigdy nie miała problemu. Pamiętaj jednak, aby zresetować działający katalog w ramach debugowania.


6

To stary problem, ale zmierzyłem się z nim dzisiaj, aby naprawić potok kompilacji na naszym serwerze ciągłej integracji. Dodawanie

<Reference Include="System.Runtime" />

mój .csprojplik rozwiązał problem dla mnie.

Trochę kontekstu: zainteresowany projekt to pełny projekt .Net Framework 4.6.1, bez problemów z kompilacją na komputerach programistycznych. Problem pojawia się tylko na serwerze kompilacji, którego nie możemy kontrolować, może być spowodowany inną wersją zestawu SDK lub czymś podobnym.

Dodanie proponowanego <Referencerozwiązało błąd kompilacji, za cenę ostrzeżenia o braku odniesienia (żółty trójkąt na dodanym wpisie w drzewie odniesień) w Visual Studio.

Mam nadzieję, że może to pomóc ludziom w podobnych scenariuszach ...


Dla mnie również rozwiązane, w podobnym kontekście
Nicola Celiento

3

Zainstaluj środowisko uruchomieniowe .NET, a także pakiet docelowy dla wersji .NET, na którą celujesz.

Pakiet programisty to tylko te dwie rzeczy w pakiecie, ale na dzień dzisiejszy nie wydaje się mieć wersji 4.6, więc będziesz musiał zainstalować te dwa elementy osobno.

Pliki do pobrania można znaleźć tutaj: http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#


3

Napotkałem również ten problem, próbując uruchomić projekt ASP .NET MVC po drobnej aktualizacji naszej bazy kodu, mimo że skompilował się bez błędów:

Komunikat o błędzie kompilatora: CS0012: Typ „System.Object” jest zdefiniowany w zestawie, do którego nie ma odniesienia. Musisz dodać odwołanie do zestawu „System.Runtime, Wersja = 4.0.0.0, Kultura = neutralny, PublicKeyToken = b03f5f7f11d50a3a”.

Nasz projekt nigdy nie napotkał tego problemu, więc sceptycznie podchodziłem do zmiany plików konfiguracyjnych, zanim odkryłem główną przyczynę. Z dzienników błędów udało mi się zlokalizować szczegółowe dane wyjściowe kompilatora, które wskazywały na to, co się naprawdę działo:

ostrzeżenie CS1685: Predefiniowany typ „System.Runtime.CompilerServices.ExtensionAttribute” jest zdefiniowany w wielu złożeniach w aliasie globalnym; przy użyciu definicji z „c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ mscorlib.dll”

c: \ Users \ Admin \ Software Development \ source-control \ Binaries \ Publish \ WebApp \ Views \ Account \ Index.cshtml (35,20): błąd CS0012: Typ „System.Object” jest zdefiniowany w zestawie, który jest brak odniesienia. Musisz dodać odwołanie do zestawu „System.Runtime, Wersja = 4.0.0.0, Kultura = neutralny, PublicKeyToken = b03f5f7f11d50a3a”.

c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Tymczasowe pliki ASP.NET \ meseems.webapp \ 68e2ea0f \ 8c5ee951 \ assembly \ dl3 \ 52ad4dac \ 84698469_3bb3d401 \ System.Collections.Immutable.DLL: (Położenie związane z symbolem do poprzedniego błędu)

Najwyraźniej nowy pakiet dodany do naszego projektu odwoływał się do starszej wersji .NET Framework, powodując problem „definicji w wielu złożeniach” (CS1685), co doprowadziło do błędu kompilatora widoku ostrzy w czasie wykonywania.

Usunąłem niezgodny pakiet (System.Collections.Immutable.dll) i problem przestał występować. Jeśli jednak pakiet nie może zostać usunięty z twojego projektu, musisz wypróbować odpowiedź Baahubali .


2

Na naszym serwerze kompilacji Tfs 2013 miałem ten sam błąd w projekcie testowym. z głównym projektem sieciowym uruchomionym w .Net 4.5.1.

Zainstalowałem pakiet nuGet System Runtime i dodałem odwołanie z paczek \ System.Runtime.4.3.0 \ ref \ net462 \ System.Runtime.dll

To dla mnie rozwiązało.


To prawdopodobnie nie powinno działać, ponieważ mówisz, aby używać biblioteki .NET 4.6.2 DLL z projektem .NET 4.5.1
Chris Marisic

1
.. a jednak zadziałało, także dla mnie. Nie ma wyboru, ponieważ folder ... \ 45 \ ... zawiera tylko plik pośredniczący o nazwie _._
nathanchere



1

Miałem ten problem w rozwiązaniu z projektem Web API i kilkoma projektami bibliotecznymi. Jeden z projektów bibliotecznych opierał się na kompilacji, z błędami, które mówiły, że atrybuty Unity nie były „poprawnymi” atrybutami, a następnie jeden błąd powiedział, że muszę odwoływać się do System.Runtime.

Po wielu poszukiwaniach, ponownej instalacji pakietu programisty 4.5.2 i nic nie działającego, doszedłem do wniosku, że może to tylko niedopasowanie wersji. Spojrzałem więc na właściwości każdego projektu i jedna z podstawowych bibliotek była ukierunkowana na 4.5, podczas gdy każda inna była ukierunkowana na 4.5.2. Zmieniłem ten, aby obrał za cel także 4.5.2 i błędy zniknęły.


1

Kopiuję plik „C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5.1 \ Facades \ system.runtime.dll” do folderu bin serwera produkcyjnego, co rozwiązuje problem.


Innym sposobem jest dodanie odniesienia do tego zestawu w projekcie i ustawienie Copy Local = True.
John Mc


0

Dla mnie pomógł tylko ten wiersz kodu:

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


-1

Usunięcie odwołania w Menedżerze pakietów Nuget i ponowne dodanie go rozwiązało problem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.