web-dev-qa-db-de.com

Fügen Sie einen Verweis auf System.Core hinzu, wenn das Buildsystem bereits darauf verweist

Visual Studio Intellisense erkennt das dynamische Schlüsselwort nicht, obwohl das Projekt erstellt wird. Ich habe versucht, einen Verweis auf System.Core hinzuzufügen, um das Problem zu lösen. Ich erhalte diesen Fehler: 

Ein Verweis auf 'System.Core' konnte nicht hinzugefügt werden. Diese Komponente ist bereits automatisch vom Build-System referenziert.

Ich habe festgestellt, dass andere meiner Projekte auf System.Core verweisen. Mein Fix bestand darin, das Csproj direkt zu bearbeiten, wodurch der Intellisense korrigiert wurde. Was gibt? Warum lässt VS es nicht über die Benutzeroberfläche tun?

29
Shaun Luttin

Nachdem ich einige Nachforschungen angestellt hatte, waren alles, was ich gefunden hatte, vorherige SO - Tickets und einige Blogs, und letztendlich verwendeten sie alle die gleiche Umgehungsmöglichkeit wie Sie. Dann fand ich einen Fehlerbericht jemanden, der 2011 bei Microsoft Connect eingereicht wurde, der schließlich etwa ein Jahr später von Chuck England, einem MSFT-Mitarbeiter, beantwortet wurde.

TL; DR - Dies war eine bewusste Entscheidung des Teams aufgrund der Multi-Targeting - Funktion von VS2008 (das .NET Framework-Ziel eines Projekts kann geändert werden).

Da für das anvisierte Framework "System.Core" erforderlich ist und das Entfernen dieses Objekts einen Build (soweit ich Chucks Antwort verstehen kann) verhindert, haben sie beschlossen, einen Verweis darauf zu erzwingen, selbst wenn Sie dies nicht tun siehe in der Referenzliste.

Ein bisschen "Sicherheits" -Hack, könnten Sie sagen, mit dem unerwünschten Nebeneffekt, dass dieser Fehler ausgelöst wird, wenn Sie versuchen, ihn erneut zu den Verweisen hinzuzufügen, und am Ende die Projektdatei direkt bearbeiten müssen.


Microsoft Connect wurde im Jahr 2018 ausgemustert. Nachfolgend eine Kombination der erhaltenen Antworten:

Ja, die Erfahrung ist nicht so toll. Da System.Core erforderlich ist, sollten Sie es niemals entfernen. Wir haben das Problem behoben, indem wir es für Sie hinzugefügt haben, auch wenn Sie die Referenz entfernen. Die Nachricht, die Sie gesehen haben, zeigt an, dass auf System.Core implizit verwiesen wird. Die Tatsache, dass Sie es entfernt haben, mit Ausnahme des physischen Entfernens einer Zeile aus der Projektdatei, hat den Build in keiner Weise geändert. 

Es gibt legitime Szenarien, in denen Sie dies vielleicht tun möchten, aber es ist ein sehr eckiger Eckpunkt. Wir sollten jedoch blind ignorieren, dass ein Fehler generiert wird, wenn Sie ihn wieder hinzufügen. Vieles davon wurde uns von früheren Versionen auferlegt, die Multi-Targeting nicht verstanden haben und einfach nicht bereinigt wurden.

[J] Sie können es manuell wieder hinzufügen, indem Sie mit der rechten Maustaste auf den Projektknoten klicken und Entladen auswählen. Klicken Sie erneut mit der rechten Maustaste auf den Projektknoten und wählen Sie Bearbeiten. Kopieren Sie im Editor eine weitere Referenzzeile (z. B. die für "System") und fügen Sie sie unterhalb der ursprünglichen Referenz in dieselbe ItemGroup ein. Ändern Sie den Referenznamen in "System.Core". Klicken Sie mit der rechten Maustaste auf den Projektknoten und wählen Sie Neu laden. Wählen Sie "Ja", um die Frage zu speichern und neu zu laden.

VS2008 hat Multi-Targeting nicht korrekt verarbeitet. Es würde Ihnen erlauben, Dinge zu bauen, die nicht legitim waren. Mit VS2010 haben wir uns sehr darum bemüht, sicherzustellen, dass das Ziel-Framework ausgeführt wird, wenn es für das Ziel-Framework erstellt wird. Ich kann nicht sagen, dass ich von Orten weiß, an denen dies nicht stimmt.

Wir können nicht zum VS2008 zurückkehren, da Multi-Targeting nicht verstanden wird. Echte "Profile" wie das Client-Profil des .NET 4.0-Frameworks wurden auch nicht verstanden. Tatsächlich besteht das Problem darin, dass das VS2008-System für Multi-Targeting aktualisiert wurde und dass der neue Satz von Regeln den Verweis ablehnt.

In diesem Fall bauen wir, obwohl Sie einen Verweis entfernt haben. Man könnte sagen, aber es hätte nicht gebaut werden sollen. Es wird jedoch auf dem angestrebten Rahmen ablaufen und sollte daher aufgebaut sein. Die Tatsache, dass wir einen "erforderlichen" Verweis für Sie hinzugefügt haben, ist eine zerbrochene Erfahrung bei der Entwicklung.

Wir haben das wirklich nicht früh genug verstanden und mit einem wirklich soliden Verständnis dafür, wie wir es beheben können, um vor der Veröffentlichung eine Lösung zu finden. Aber die Tatsache, dass Sie immer "System.Core" referenzieren und daher niemals entfernen sollten, machte dies zu einem Problem, das nicht behoben werden konnte, da 99% der Kunden dies nicht tun würden.

35
Grant

Aufbauend auf @ Arthur's Antwort habe ich zwei Dinge gefunden, die für mich gelöst wurden:

Fügen Sie der .csproj-Datei die fehlende Zeile hinzu:

<Reference Include="System.Core" />

Fügen Sie dann gemäß einer forums.asp.net-Antwort die Referenz für die System.Core-Assembly in main web.config hinzu ( nicht die unter Views ):

  <system.web>
    <compilation debug="true" targetFramework="4.7.1">
      <assemblies>
        <add Assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <add Assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add Assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.7.1" />
    <!-- ... ... -->
  </system.web>

Dann:

1) Stellen Sie sicher, dass die Version von .NET Framework für die Kompiliereigenschaft in web.config mit der in den Projekteigenschaften angegebenen Version übereinstimmt.

2) Stellen Sie sicher, dass die Version der MVC-Baugruppe im Ansichtenordner web.config der MVC-Baugruppe entspricht, die Sie in Ihrem Projekt verwenden.

3) Starten Sie Visual Studio neu (2017 hier).

Hoffe das hilft.

7
woohoo

Wiederhergestellt durch manuelles Hinzufügen dieser Zeilen zur .csproj-Datei:

<Reference Include="System" />
<Reference Include="System.Core" />
4
Arthur


hallo, ich weiß, dass dieser Beitrag schon alt ist, aber für diejenigen, die noch nach einer Lösung suchen, hoffe, dass dies Ihnen helfen kann. Da ich auch mit dem gleichen Problem konfrontiert bin, weil ich versehentlich die System.Core-DLL gelöscht habe.

Und was ich tat, war, dass ich diese DLL von C:\Programme (x86)\Referenzassemblies\Microsoft\Framework.NETFramework\v4.6.1\System.Core.dll kopierte und diese Lib in mein Projekt eingefügt habe Behälter.

Später können Sie sehen, dass in Ihrem Projekt die DLL automatisch in die Referenz eingefügt wird. Danach starte ich mein vs neu und es funktioniert! Goodluck n hoffe, es kann dein Problem lösen

1
warabino