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 Gebrauch mache@Html.ActionLink
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 hinzuzufügen netstandard
? Wie kann ich das Problem beheben, ohne auf netstandard
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.
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 nichts finden System.Transactions
. Wie kann ich suchen, worauf es verweist?
System.Data.SQLite.Core
Paket basiert auf .NET Core (oder .NET Standard, ich habe nicht nach der Quelle oder den Dokumenten gesucht). Sehen Sie sich die Fehlermeldung ganz am Ende Ihrer Projektdatei an.packages\System.Data.SQLite.Core.1.0.108.0\lib
Verzeichnis an und es enthält einen Ordner für jede Version von .NET Framework, einschließlich 4.6, das ich verwende. Ich denke nicht, dass das hier das Problem ist.Antworten:
Ich denke, die Lösung könnte dieses Problem auf GitHub sein :
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.In diesem Handbuch finden Sie möglicherweise auch ein Tool, das Sie beim Upgrade unterstützt . Es ist jedoch eine späte VS 15.7-Version erforderlich.
quelle
<add assembly="netstandard
fehlte und auch httpRuntime nicht 4.7.1- Dies ist die Antwort! Vielen Dank !!Das manuelle Bearbeiten der .csproj-Datei und das Hinzufügen der folgenden Referenz hat bei mir funktioniert.
Vielen Dank an Fahad Alshaya, der es hier vorgeschlagen hat .
quelle
Ich musste eine Kombination der Antworten anderer Leute auf diesen Thread machen.
<Reference Include="netstandard" />
quelle
Ich bin schon einmal darauf gestoßen, und das Ausprobieren einer Reihe von Dingen hat es für mich behoben:
Wenn es sich um eine .net-Kernanwendung handelt, die auf dem vollständigen Framework ausgeführt wird, müssen Sie eine global.json- Datei im Stammverzeichnis Ihres Projekts einfügen und auf das SDK verweisen, das Sie für dieses Projekt verwenden möchten:
quelle
Das Löschen der Ordner Bin und Obj hat bei mir funktioniert.
quelle
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:
quelle
<Reference Include="netstandard" />
von zur csproj-Datei, ABER ... das funktioniert nur, wenn Sie AUCH CopyLocal auf true setzen. Nichts davon macht Sinn.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.
quelle
Ich habe dies beim Upgrade von .NET Core 1.1 auf 2.1 erlebt.
Ich folgte den Anweisungen skizzierte hier .
Versuchen Sie, die .csproj-Datei zu entfernen
<RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion>
oder zu entfernen<NetStandardImplicitPackageVersion>
.quelle
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:
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
Starten Sie die Maschine neu
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.
quelle
Ich stehe vor dem gleichen Problem, das ich nach Setup Now Application habe
1-
2- Referenz hinzufügen
3-
Copy Above Path Dll to Application Bin Folder on web server
quelle
Könnte mit einem dieser Dinge zu tun haben:
quelle
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.
quelle
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:
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
zu<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
in der CSPROJ Datei.quelle
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.
quelle
In meinem Fall fand ich heraus, dass das problematische Nuget System.Memory in Version 4.5.1 war. Wenn es auf Version 4.5.3 aktualisiert wird, funktioniert es !!
quelle
Diejenigen, die keine web.config-Datei haben. Ausgabetyp außer Webanwendung. Aktualisieren Sie die Projektdatei (.csproj) mit dem folgenden Code.
Dies kann dazu führen, dass das .netframework nicht ordnungsgemäß hinzugefügt / entfernt wird, oder es kann auf unerwartete Weise beschädigt werden.
Ausgabetyp
quelle
Dieses Problem basiert auf Ihrer installierten Version von Visual Studio und Windows. Sie können die folgenden Schritte ausführen: -
Herabstufung Ihrer PCL mit dem folgenden Befehl
quelle