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.

Luke Puplett
źródło

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>
Baahubali
źródło
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
Luke Puplett
źródło
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>
Lorena Pita
źródło
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 ).

sfuqua
źródło
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.

wezzix
źródło
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 ...

Pietro Martinelli
źródło
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#

Oenotria
źródło
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 .

Thomas CG de Vilhena
źródło
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.

Bob Lokerse
źródł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
2

dodałem System.Runtime.dll do projektu bin i zadziałało :)

Abdullah Tahan
źródło
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.

sliderhouserules
źródło
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.

Tomluke
źródło
Innym sposobem jest dodanie odniesienia do tego zestawu w projekcie i ustawienie Copy Local = True.
John Mc
0

zainstaluj https://www.microsoft.com/en-us/download/details.aspx?id=49978 Microsoft .NET Framework 4.6.1 Developer Pack i dodaj ten wiersz kodu w 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>
Muhammad Armaghan
źródło
0

Dla mnie pomógł tylko ten wiersz kodu:

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

Balabam
źródło
-1

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

Stefan
źródło