Das Projekt ist eine ASP.NET MVC-Webanwendung für .NET Framework 4.6.1.

Plötzlich (einige NuGet-Pakete wurden aktualisiert) wurde zur Laufzeit der folgende Fehler angezeigt:

CS0012: Der Typ 'System.Object' wird in einer Assembly definiert, auf die nicht verwiesen wird. Sie müssen einen Verweis auf die Assembly 'netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51' hinzufügen.

In meiner Hauptansicht Index.cshtml in einer Zeile, in der ich @Html.ActionLink verwende

Ich habe .NET Core SDK 2.0 und .NET Framework 4.7.1 auf meinem Computer installiert, möchte aber keinen Verweis darauf einfügen. Dies ist nur eine .NET Framework-Webanwendung. Sie wird unter Windows IIS gehostet, wo das installierte Framework 4.6.1 ist. Auf dem Server ist kein NET Core installiert.

Warum wird darum gebeten, einen Verweis auf netstandard hinzuzufügen? Wie kann ich das Problem beheben, ohne auf netstandard, aber auf Windows .NET Framework 4.6.1 zu verweisen?

Ich habe ein vorheriges Commit ausgecheckt, das gut funktioniert hat, und ich erhalte immer noch diesen Fehler. Es hängt also nicht mit NuGet-Paketen zusammen, die aktualisiert werden. Scheint etwas auf meiner lokalen Entwicklungsmaschine zu sein.

Wenn Sie die App in einem Verzeichnis veröffentlichen und mit IIS ausführen, funktioniert sie.

Link zu .csproj gist

Packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Antlr" version="3.5.0.2" targetFramework="net46" />
  <package id="BundleTransformer.Core" version="1.9.69" targetFramework="net46" />
  <package id="BundleTransformer.Handlebars" version="1.9.73" targetFramework="net46" />
  <package id="BundleTransformer.Less" version="1.9.69" targetFramework="net46" />
  <package id="BundleTransformer.Yui" version="1.9.52" targetFramework="net46" />
  <package id="Dapper" version="1.42" targetFramework="net46" />
  <package id="EcmaScript.Net" version="1.0.1.0" targetFramework="net46" />
  <package id="EntityFramework" version="6.0.0" targetFramework="net46" />
  <package id="Glimpse" version="1.8.6" targetFramework="net46" />
  <package id="Glimpse.AspNet" version="1.9.2" targetFramework="net46" />
  <package id="Glimpse.Mvc5" version="1.5.3" targetFramework="net46" />
  <package id="JavaScriptEngineSwitcher.Core" version="1.2.4" targetFramework="net46" />
  <package id="JavaScriptEngineSwitcher.V8" version="1.3.0" targetFramework="net46" />
  <package id="jQuery" version="2.1.3" targetFramework="net46" />
  <package id="jQuery.Validation" version="1.13.1" targetFramework="net46" />
  <package id="LowercaseDashedRoute" version="1.0.14" targetFramework="net46" />
  <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.Owin" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.SqlServer.Compact" version="4.0.8876.1" targetFramework="net46" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />
  <package id="Moment.js" version="2.10.2" targetFramework="net46" />
  <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net46" />
  <package id="NWebsec" version="5.1.1" targetFramework="net46" />
  <package id="NWebsec.Core" version="2.1.0" targetFramework="net46" />
  <package id="NWebsec.Mvc" version="5.1.1" targetFramework="net46" />
  <package id="Owin" version="1.0" targetFramework="net46" />
  <package id="Respond" version="1.4.2" targetFramework="net46" />
  <package id="Sendgrid" version="6.3.0" targetFramework="net46" />
  <package id="SendGrid.SmtpApi" version="1.3.1" targetFramework="net46" />
  <package id="Serilog" version="2.6.0" targetFramework="net46" />
  <package id="Serilog.Enrichers.Environment" version="2.1.2" targetFramework="net46" />
  <package id="Serilog.Sinks.File" version="3.2.0" targetFramework="net46" />
  <package id="Serilog.Sinks.RollingFile" version="3.3.0" targetFramework="net46" />
  <package id="Serilog.Sinks.Sentry" version="2.1.4" targetFramework="net46" />
  <package id="SerilogWeb.Classic" version="2.1.17" targetFramework="net46" />
  <package id="SharpRaven" version="2.2.0" targetFramework="net46" />
  <package id="System.Data.SQLite" version="1.0.108.0" targetFramework="net46" />
  <package id="System.Data.SQLite.Core" version="1.0.108.0" targetFramework="net46" />
  <package id="System.Data.SQLite.EF6" version="1.0.108.0" targetFramework="net46" />
  <package id="System.Data.SQLite.Linq" version="1.0.108.0" targetFramework="net46" />
  <package id="Twitter.Bootstrap.Less" version="3.3.4" targetFramework="net46" />
  <package id="WebActivatorEx" version="2.0.6" targetFramework="net46" />
  <package id="WebGrease" version="1.6.0" targetFramework="net46" />
  <package id="YUICompressor.NET" version="2.7.0.0" targetFramework="net46" />
</packages>

Beim Veröffentlichen der App mit VS2017 im Dateisystem wird in der Ausgabe die folgende Warnung angezeigt:

Die folgende Assembly hat Abhängigkeiten von einer Version von .NET Framework, die höher als das Ziel ist und zur Laufzeit möglicherweise nicht korrekt geladen wird und einen Fehler verursacht: netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51. Die Abhängigkeiten sind: System.Transactions, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089. Sie sollten entweder sicherstellen, dass die abhängige Assembly für das Zielframework korrekt ist, oder sicherstellen, dass das Zielframework, das Sie ansprechen, das der abhängigen Assembly ist.

Aber ich kann auf System.Transactions nichts finden. Wie kann ich suchen, worauf es verweist?

205
empz 19 Apr. 2018 im 19:01

15 Antworten

Beste Antwort

Ich denke, die Lösung könnte dieses Problem auf GitHub sein:

Versuchen Sie, eine netstandard-Referenz in web.config wie folgt hinzuzufügen: "

<system.web>
  <compilation debug="true" targetFramework="4.7.1" >
    <assemblies>
      <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, 
            PublicKeyToken=cc7b13ffcd2ddd51"/>
    </assemblies>
  </compilation>
  <httpRuntime targetFramework="4.7.1" />

Mir ist klar, dass Sie 4.6.1 verwenden, aber die Wahl von .NET 4.7.1 ist wichtig, da ältere Framework-Versionen nicht vollständig mit .NET Standard 2.0 kompatibel sind.

Ich weiß dies aus schmerzhafter Erfahrung, als ich .NET Standard-Bibliotheken einführte, hatte ich viele Probleme mit NUGET-Paketen und Referenzbrüchen. Die andere Änderung, die Sie berücksichtigen müssen, ist das Upgrade auf PackageReferences anstelle von package.config -Dateien.

Siehe dieser Anleitung und Sie Möglicherweise möchten Sie auch ein Tool, das das Upgrade unterstützt. Es ist jedoch eine späte VS 15.7-Version erforderlich.

168
Wai Ha Lee 17 Okt. 2018 im 12:15

Das manuelle Bearbeiten der .csproj-Datei und das Hinzufügen der folgenden Referenz hat bei mir funktioniert.

<Reference Include="netstandard" />

Vielen Dank an Fahad Alshaya, der es hier vorgeschlagen hat.

33
kamilk 10 Mai 2019 im 13:02

Ich musste eine Kombination der Antworten anderer Leute auf diesen Thread machen.

  1. Installieren Sie die NetStandard.Library über NuGet
  2. Manuelles Bearbeiten der .csproj-Datei und Hinzufügen der Referenz. <Reference Include="netstandard" />
  3. Projekt erweitern -> Verweise im VS-Projektmappen-Explorer, klicken Sie mit der rechten Maustaste auf "Netzstandard", zeigen Sie die Eigenschaftenseite an und setzen Sie "Lokal kopieren" auf "true".
12
Armand 11 Mai 2020 im 12:57

Das Löschen der Ordner Bin und Obj hat bei mir funktioniert.

5
Vijay Verma 16 Apr. 2019 im 11:05

Ich bin schon einmal darauf gestoßen, und das Ausprobieren einer Reihe von Dingen hat es für mich behoben:

  • Löschen Sie einen Bin-Ordner, falls vorhanden
  • Löschen Sie den versteckten .vs-Ordner
  • Stellen Sie sicher, dass das 4.6.1-Targeting-Pack installiert ist
  • Letzter Grabenaufwand: Fügen Sie einen Verweis auf System.Runtime hinzu (klicken Sie mit der rechten Maustaste auf Projekt -> Hinzufügen -> Verweis -> aktivieren Sie das Kontrollkästchen neben System.Runtime), obwohl ich immer herausgefunden habe, dass einer der oben genannten Punkte ihn stattdessen gelöst hat dies zu tun.

Wenn dies eine .net-Kern-App ist, die auf dem vollständigen Framework ausgeführt wird, müssen Sie eine global.json Datei im Stammverzeichnis Ihres Projekts und verweisen Sie auf das SDK, das Sie für dieses Projekt verwenden möchten:

{
  "sdk": {
    "version": "1.0.0-preview2-003121"
  }
}
4
Kyle Dodge 29 Apr. 2018 im 06:09

Nach dem Upgrade von 4.6.1 Framework auf 4.7.2 wurde der folgende Fehler angezeigt:

"Der Typ 'System.Object' ist in einer Assembly definiert, auf die nicht verwiesen wird. Sie müssen einen Verweis auf Assembly 'netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51' hinzufügen." und letztendlich bestand die Lösung darin, die oben erwähnte "netstandard" -Baugruppenreferenz hinzuzufügen:

<compilation debug="true" targetFramework="4.7.1" >
    <assemblies>
      <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, 
            PublicKeyToken=cc7b13ffcd2ddd51"/>
    </assemblies>
  </compilation>
3
Raghav 18 Sept. 2019 im 08:56

Obwohl dies ein alter Thread ist, hatte ich heute das gleiche Problem. Letzte Woche habe ich einige NuGet-Pakete aktualisiert und obwohl die MVC-Website auf meinem Entwicklungscomputer einwandfrei funktioniert hat, als ich sie auf dem Testserver veröffentlicht habe, ist sie fehlgeschlagen.

Ich habe zahlreiche Beiträge gelesen, aber keiner hat funktioniert. Ich habe schließlich die DLLs in meinem lokalen Bin mit denen auf dem Testserver verglichen und festgestellt, dass die netstandard.dll nicht hochgeladen wurde. Nach dem Hochladen funktionierte die Website einwandfrei. Ich bin mir nicht sicher, warum VS2017 Web Deploy die DLL nicht veröffentlicht hat.

Nur etwas, worauf Sie achten sollten, falls keines der oben genannten Verfahren für Sie funktioniert.

1
George Phillipson 18 März 2019 im 22:10

Ich habe dies beim Upgrade von .NET Core 1.1 auf 2.1 erlebt.

Ich habe die Anweisungen hier befolgt.

Versuchen Sie, den Abschnitt <RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion> oder <NetStandardImplicitPackageVersion> in der .csproj zu entfernen.

1
istrupin 27 Aug. 2019 im 20:17

Nach der Bereitstellung der von 4.6.1 auf 4.7.2 migrierten Anwendung wurde dieser Fehler auf dem Produktionsserver angezeigt.

Wir haben festgestellt, dass das .NET Framework 4.7.2 dort nicht installiert wurde. Um dieses Problem zu lösen, haben wir die folgenden Schritte ausgeführt:

  1. Installierte .NET Framework 4.7.2 von:

    https://support.microsoft.com/en-us/help/4054530/microsoft-net-framework-4-7-2-offline-installer-for-windows

  2. Starten Sie die Maschine neu

  3. Bestätigte die .NET Framework-Version mit Hilfe von Wie finde ich die .NET-Version?

Durch erneutes Ausführen der Anwendung mit der auf dem Computer installierten .NET Framework 4.7.2-Version wurde das Problem behoben.

1
Raghav 25 Sept. 2019 im 18:24

Könnte mit einem dieser Dinge zu tun haben:

  1. Installieren Sie ein neueres SDK.
  2. Suchen Sie in .csproj nach Referenz Include = "netstandard"
  3. Überprüfen Sie die Assemblyversionen in den Kompilierungs-Tags in Views \ Web.config und Web.config.
0
ivw 24 Apr. 2018 im 20:14

Geben Sie hier die Bildbeschreibung ein Setzen Sie Copy Enbale in den Eigenschaften netstandard.dll auf true.

Öffnen Sie den Projektmappen-Explorer und klicken Sie mit der rechten Maustaste auf netstandard.dll. Setzen Sie Copy Local auf true.

0
hani abukhurma 21 Nov. 2019 im 11:44

Ich habe das gleiche Problem wie nach Setup Now Application Work

1-

<compilation debug="true" targetFramework="4.7.1">
      <assemblies>
        <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, 
      PublicKeyToken=cc7b13ffcd2ddd51"/>
      </assemblies>
    </compilation>

2- Referenz hinzufügen

 **C:\Program Files (x86)\Microsoft Visual
Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\ADL
 Tools\2.4.0000.0\ASALocalRun\netstandard.dll**

3-

Copy Above Path Dll to Application Bin Folder on web server

0
Mansoor 30 Jän. 2020 im 15:15

Dieses Problem trat auf, als ich versuchte, einer .NET4.6.1-Bibliothek eine .NETStandard-Abhängigkeit hinzuzufügen und diese unter Linux mit Mono 4.6.2 (der mit Ubuntu 16.04 gelieferten Version) zu kompilieren.

Ich habe es heute endlich gelöst; Die Lösung erfordert beides:

  1. Ändern Sie <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> in der .csproj-Datei in <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>.
  2. Aktualisieren Sie Ihr Mono auf eine neuere Version. Ich glaube, 5.x sollte funktionieren, aber um sicher zu sein, können Sie einfach Ubuntu 20.04 (das zum Zeitpunkt des Schreibens nur in der Vorschau angezeigt wird) installieren, das Mono 6.8.0.105 enthält.
0
knocte 1 März 2020 im 07:24

Sie können Ihrer web.config in Ihrem Projekt hinzufügen.

Es würde nicht funktionieren, wenn Sie es zu Projekten web.config hinzufügen, da es mit MVC funktioniert.

0
MEO 11 März 2020 im 12:17

Dieses Problem basiert auf Ihrer installierten Version von Visual Studio und Windows. Sie können die folgenden Schritte ausführen: -

  1. Gehen Sie zum Befehlsfenster
  2. Herabstufung Ihrer PCL mit dem folgenden Befehl

    Install-Package Xamarin.Forms -Version 2.5.1.527436
    
  3. Erstellen Sie Ihr Projekt neu.
  4. Jetzt können Sie die gewünschte Ausgabe sehen
-5
Suraj Rao 14 Nov. 2018 im 10:22