it-swarm.com.de

Sie müssen einen Verweis auf Assemblys Netzstandard Version 2.0.0.0 hinzufügen

Das Projekt ist eine ASP.NET MVC-Webanwendung, die auf .NET Framework 4.6.1 abzielt.

Plötzlich (einige NuGet-Pakete wurden aktualisiert) bekam ich zur Laufzeit den folgenden Fehler:

CS0012: Der Typ 'System.Object' ist in einer Assembly definiert, die nicht .__ ist. referenziert. Sie müssen einen Verweis auf den Netzstandard von Assembly, .__, hinzufügen. Version = 2.0.0.0, Kultur = neutral, PublicKeyToken = cc7b13ffcd2ddd51 '.

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 Rechner installiert, möchte aber keinen Verweis darauf enthalten. Dies ist nur eine .NET Framework-Web-App. Sie wird auf Windows IIS gehostet, wobei das installierte Framework 4.6.1 ist. Auf dem Server ist kein NET Core installiert.

Warum bittet es darum, einen Verweis auf netstandard hinzuzufügen? Wie kann ich das Problem beheben, ohne auf netstandard, aber auf das vollständige Windows .NET Framework 4.6.1 zu verweisen?

Ich habe einen vorherigen Commit ausgecheckt, der gut funktioniert hat, und ich bekomme immer noch diesen Fehler. Es hängt also nicht mit NuGet-Paketen zusammen, die aktualisiert werden. Scheint etwas auf meinem lokalen Entwicklungscomputer zu sein.

Wenn die App in einem Verzeichnis veröffentlicht und mit IIS ausgeführt wird, funktioniert sie.

Link zu .csproj Gist

packages.json

<?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 .NET-Version Framework, das höher als das Ziel ist und möglicherweise nicht richtig geladen wird zur Laufzeit einen Fehler verursachen: netstandard, Version = 2.0.0.0, Kultur = 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 ist für das Zielgerüst korrekt, oder stellen Sie sicher, dass Das Ziel-Framework, das Sie ansprechen, ist das abhängige Versammlung.

Ich kann aber nichts über System.Transactions finden. Wie kann ich suchen, was darauf verweist?

19
emzero

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

Fügen Sie den netstandard-Verweis in web.config folgendermaßen hinzu: "

<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" />

Ich weiß, 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 kenne das aus schmerzhaften Erfahrungen. Als ich .NET Standard-Bibliotheken vorstellte, hatte ich eine Menge Probleme mit NUGET-Paketen und brechenden Referenzen. Die andere Änderung, die Sie berücksichtigen müssen, ist ein Upgrade auf PackageReferences anstelle von package.config-Dateien.

Siehe dieses Handbuch . Möglicherweise möchten Sie auch ein Werkzeug zur Unterstützung des Upgrades . Es ist jedoch eine späte Version von VS 15.7 erforderlich.

23
Quango

Ich bin schon vorher darauf gestoßen und habe es mit einigen Dingen behoben:

  • Löschen Sie einen Ordner, falls vorhanden
  • Löschen Sie den versteckten Ordner .vs
  • Stellen Sie sicher, dass das Targeting-Paket 4.6.1 installiert ist
  • Last Ditch Effort: 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 glaube, ich habe immer herausgefunden, dass einer der oben genannten Probleme gelöst wurde dies zu tun.

Wenn dies eine .net-Kernanwendung ist, die auf dem gesamten Framework ausgeführt wird, muss ich feststellen, dass Sie eine global.json -Datei in das Stammverzeichnis Ihres Projekts aufnehmen und auf das SDK verweisen müssen, für das Sie es verwenden möchten dieses Projekt:

{
  "sdk": {
    "version": "1.0.0-preview2-003121"
  }
}
2
Kyle Dodge

Könnte mit einem dieser Dinge zu tun haben:

  1. Installieren Sie ein neueres SDK.
  2. In .csproj nach Reference Include = "netstandard" suchen 
  3. Überprüfen Sie die Assembly-Versionen in den Kompilierungs-Tags in Views\Web.config und Web.config.
0
ivw