it-swarm.com.de

Erstellungsfehler: Sie müssen einen Verweis auf System.Runtime hinzufügen

Ich bereite eine brandneue ASP.NET MVC 5.1-Lösung vor. Ich füge ein paar NuGet-Pakete hinzu und setze sie bei der Zurb Foundation usw. ein.

Als Teil davon habe ich einen Verweis auf ein internes NuGet-Paket hinzugefügt, bei dem es sich um eine Portable Class Library handelt. Ich denke, dies verursacht ein Problem auf dem Build-Server.

TeamCity schlägt beim Build fehl:

Der Typ 'System.Object' ist in einer Assembly definiert, auf die nicht verwiesen wird. Sie müssen einen Verweis auf Assembly 'System.Runtime, Version = 4.0.0.0, hinzufügen

Ich habe ursprünglich den Fix für denselben oder einen ähnlichen Fehler beim Kompilieren der Razor-Webseiten hinzugefügt, wobei der Fix im web.config enthalten ist.

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

Das Problem ist jedoch noch nicht gelöst.

165
Luke Puplett

Durch Hinzufügen eines Verweises auf diese System.Runtime.dll-Assembly wurde das Problem behoben:

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

Diese Datei in diesem expliziten Pfad existiert jedoch nicht auf dem Build-Server.

Ich werde mit weiteren Informationen zurückkommen, sobald ich eine Dokumentation zu PCL und diesen Fassaden gefunden habe.

Aktualisieren

Ja, so ziemlich nichts zu Fassadenmontagen im gesamten Internet.

Google:

(Facades OR Facade) Portable Library site:Microsoft.com
113
Luke Puplett

Um den Fix zu implementieren, erweitern Sie zunächst den vorhandenen Abschnitt "web.config", der standardmäßig wie folgt aussieht:

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

Einmal erweitert, fügte ich die folgende neue Konfigurations-XML hinzu, wie ich dazu aufgefordert wurde:

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

Die endgültigen web.config-Tags sollten folgendermaßen aussehen:

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

Der Kommentar von PeterMajeed in der akzeptierten Antwort half mir bei einem verwandten Problem. Ich verwende die tragbare Bibliothek nicht, habe jedoch den gleichen Fehler bei einer neuen Windows Server 2012-Installation, auf der TeamCity ausgeführt wird.

Durch die Installation des Microsoft .NET Framework 4.5.1 Developer Pack wurde das Problem behoben (nachdem die MS Build Tools separat installiert wurden).

26
sfuqua

Der einzige Weg, der für mich funktioniert hat. Fügen Sie die Assembly zu web.config hinzu

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

Ich hatte dieses Problem in einigen Lösungen auf VS 2015 (nicht jedoch in MVC) und sogar in der gleichen Lösung auf einer Workstation, aber nicht auf einer anderen. Die Fehler begannen, nachdem die .NET-Version auf 4.6 geändert und auf PCL verwiesen wurde.

Die Lösung ist einfach: Schließen Sie die Lösung und löschen Sie den versteckten .vs-Ordner im selben Ordner wie die Lösung.

Durch das Hinzufügen der fehlenden Verweise, wie in anderen Antworten vorgeschlagen, wird das Problem ebenfalls gelöst. Der Fehler bleibt jedoch auch nach dem Entfernen der Verweise behoben.

Bei TeamCity kann ich nicht sagen, da meine Konfiguration nie ein Problem hatte. Stellen Sie jedoch sicher, dass Sie den Arbeitskatalog als Teil Ihrer Debugging-Bemühungen zurücksetzen.

8
wezzix

Installieren Sie die .NET-Laufzeitumgebung sowie das Zielpaket für die Zielversion von .NET.

Das Entwicklerpaket ist nur aus diesen beiden Dingen zusammengestellt, es scheint jedoch bis heute keine 4.6-Version zu geben, daher müssen Sie die beiden Komponenten separat installieren.

Downloads finden Sie hier: http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#

3
Oenotria

Es ist ein altes Problem, aber ich habe mich heute damit befasst, um eine Build-Pipeline auf unserem Continuous Integration Server zu reparieren. Hinzufügen

<Reference Include="System.Runtime" />

to my .csproj file hat das Problem für mich gelöst.

Ein bisschen Kontext: Das interessierte Projekt ist ein vollständiges .Net Framework 4.6.1-Projekt, ohne dass es auf den Entwicklungsmaschinen Probleme gibt. Das Problem tritt nur auf dem Build-Server auf, den wir nicht kontrollieren können, möglicherweise aufgrund einer anderen SDK-Version oder ähnlichem.

Durch Hinzufügen des vorgeschlagenen <Reference wurde der Erstellungsfehler zum Preis einer fehlenden Referenz - Warnung (gelbes Dreieck auf dem hinzugefügten Eintrag im Referenzbaum) in Visual Studio behoben.

Ich hoffe das kann Leuten in ähnlichen Szenarien helfen ...

3

Ich musste das SDK für Windows 8.0 (und nicht 8.1) herunterladen und installieren, damit der Fehler auf meinem TeamCity-Server ausgeblendet wird.

https://developer.Microsoft.com/en-us/windows/downloads/windows-8-sdk

2
Rahbek

ich habe System.Runtime.dll zu einem bin-Projekt hinzugefügt und es hat funktioniert :)

1
Abdullah Tahan

Auf unserem TFS 2013 Build Server hatte ich den gleichen Fehler in einem Testprojekt . Das Hauptwebprojekt lief unter .Net 4.5.1.

Ich habe ein nuGet-Paket von System Runtime installiert und die Referenz aus Packages\System.Runtime.4.3.0\ref\net462\System.Runtime.dll hinzugefügt

Das hat es für mich gelöst.

1
Bob Lokerse

Ich hatte dieses Problem in einer Lösung mit einem Web-API-Projekt und mehreren Bibliotheksprojekten. Eines der Bibliotheksprojekte war aufbauend, mit Fehlern, die besagten, dass die Unity-Attribute nicht "gültig" waren, und dann sagte ein Fehler, ich müsste auf System.Runtime verweisen.

Nach langem Suchen, der Neuinstallation des 4.5.2 Developer Packs und nichts funktionierendem dachte ich, dass es vielleicht nur ein Versionskonflikt war. Also habe ich mir die Eigenschaften jedes Projekts angesehen und eine der Basisbibliotheken war auf 4.5 ausgerichtet, während alle anderen auf 4.5.2 ausgerichtet waren. Ich habe das geändert, um auch auf 4.5.2 zu zielen, und die Fehler gingen weg.

1

Ich war auch mit diesem Problem konfrontiert, als ich nach einem kleineren Update unserer Codebase ein ASP .NET MVC-Projekt ausführte, obwohl es ohne Fehler kompiliert wurde:

Compiler-Fehlermeldung: CS0012: Der Typ 'System.Object' ist in einer Assembly definiert, auf die nicht verwiesen wird. Sie müssen einen Verweis auf Assembly 'System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' hinzufügen.

Unser Projekt war nie auf dieses Problem gestoßen, daher war ich skeptisch, Konfigurationsdateien zu ändern, bevor ich die Ursache herausfand. In den Fehlerprotokollen konnte ich diese detaillierte Compiler-Ausgabe finden, die auf die tatsächlichen Vorgänge hinweist:

warning CS1685: Der vordefinierte Typ 'System.Runtime.CompilerServices.ExtensionAttribute' ist in mehreren Assemblys im globalen Alias ​​definiert. mit Definition aus 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll'

c:\Benutzer\Admin\Softwareentwicklung\Quellcodeverwaltung\Binaries\Publish\WebApp\Views\Account\Index.cshtml (35,20): Fehler CS0012: Der Typ 'System.Object' ist in einer Assembly definiert nicht referenziert Sie müssen einen Verweis auf Assembly 'System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' hinzufügen.

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporäre ASP.NET-Dateien\meseems.webapp\68e2ea0f\8c5ee951\Assembly\dl3\52ad4dac\84698469_3bb3d401\System.Collections.Immutable.DLL: zum vorherigen Fehler)

Anscheinend referenzierte ein neues Paket, das unserem Projekt hinzugefügt wurde, auf eine ältere Version von .NET Framework, wodurch das Problem "Definition in mehreren Assemblys" (CS1685) verursacht wurde, das zur Laufzeit den Compiler-Fehler "Razor View" verursachte.

Ich habe das inkompatible Paket (System.Collections.Immutable.dll) entfernt und das Problem ist nicht mehr aufgetreten. Wenn das Paket in Ihrem Projekt jedoch nicht entfernt werden kann, müssen Sie die Antwort von Baahubali versuchen.

Ich kopiere die Datei "C:\Programme (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5.1\Facades\system.runtime.dll" in den Ordner "bin" des Produktionsservers, um das Problem zu beheben.

0
Tomluke