Le projet est une application Web ASP.NET MVC utilisant le .NET Framework 4.6.1.
Tout à coup (certains paquets NuGet ont été mis à jour), j'ai commencé à obtenir l'erreur suivante pendant l'exécution :
CS0012 : Le type 'System.Object' est défini dans un assemblage qui n'est pas référencé. référencée. Vous devez ajouter une référence à l'assemblage 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
A mon avis Index.cshtml
dans une ligne où je fais usage de @Html.ActionLink
J'ai installé .NET Core SDK 2.0 et .NET Framework 4.7.1 sur mon ordinateur mais je ne veux pas y faire référence. Il s'agit d'une application web .NET Framework uniquement, elle est hébergée sur Windows IIS où le framework installé est 4.6.1, il n'y a pas de NET Core installé sur le serveur.
Alors pourquoi demande-t-on d'ajouter une référence à netstandard
? Comment puis-je le réparer sans référencer netstandard
mais la version complète de Windows .NET Framework 4.6.1 ?
J'ai vérifié un commit précédent qui fonctionnait bien et j'obtiens toujours cette erreur. Ce n'est donc pas lié à la mise à jour des paquets NuGet. Il semble que ce soit quelque chose sur ma machine de développement locale.
Si je publie l'application dans un répertoire et que je l'exécute avec IIS, cela fonctionne.
Lien vers le fichier gist .csproj
paquets.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>
Lorsque je publie l'application à l'aide de VS2017 sur le système de fichiers, j'obtiens l'avertissement suivant dans la sortie :
L'assemblage suivant dépend d'une version de .NET Framework supérieure à la version cible. Framework supérieure à la cible et risque de ne pas se charger correctement pendant l'exécution, ce qui pourrait provoquer un échec : netstandard, Version=2.0.0.0, Culture=neutre, PublicKeyToken=cc7b13ffcd2ddd51. Les dépendances sont : System.Transactions, Version=4.0.0.0, Culture=neutre, PublicKeyToken=b77a5c561934e089. Vous devez soit vous assurer que l'assemblage assemblage dépendant est correct pour le framework cible, ou bien vous assurer que que le cadre cible auquel vous vous adressez est celui de l'assemblage dépendant. dépendante.
Mais je ne trouve rien sur System.Transactions
. Comment puis-je rechercher ce qui y fait référence ?
1 votes
Quels sont les paquets NuGet que vous utilisez ? Êtes-vous sûr de ne pas référencer un paquet ASP.NET Core ?
0 votes
@RicardoPeres VS2017 ne permet pas d'ajouter un package ciblant un framework différent de celui ciblé par le projet. J'ai désinstallé et réinstallé tous les packages mais l'erreur est la même. Je ne comprends pas pourquoi cela se produit et même pourquoi pendant l'exécution....
3 votes
Les
System.Data.SQLite.Core
est basé sur .NET Core (ou .NET Standard, je n'ai pas cherché la source ou la documentation). Regardez le message d'erreur à la toute fin de votre fichier de projet.0 votes
Pourquoi dites-vous qu'il est basé sur .NET Core ? Je regarde le
packages\System.Data.SQLite.Core.1.0.108.0\lib
et il contient un dossier pour chaque version du .NET Framework, y compris la 4.6 que j'utilise. Je ne pense pas que ce soit le problème ici.0 votes
De même, la suppression du paquet n'a pas résolu le problème.
3 votes
Lorsque je suis confronté à des problèmes insolubles comme celui-ci, je fais ce qui suit : 1) noter soigneusement quelles sont les références du projet (ou sauvegarder le fichier .csproj quelque part), 2) supprimer le fichier packages.config, supprimer toutes les références externes (alternativement, vous pouvez écrire un nouveau projet à partir de zéro uniquement avec les fichiers statiques originaux, .cs, etc.), 3) configurer VS Nuget pour utiliser Package Reference au lieu du mode packages.config légal docs.microsoft.com/en-us/nuget/reference/ et 4) ajouter toutes les références nécessaires. La plupart du temps, cela fonctionne et je n'ai aucune idée de la raison pour laquelle cela a échoué auparavant.
0 votes
Avez-vous récemment mis à jour certaines références de paquets nuget ? Cela pourrait vous causer des problèmes.
0 votes
Dans mon cas, j'ai découvert que le nuget problématique était System.Memory dans la version 4.5.1. Après la mise à jour vers la version 4.5.3, cela fonctionne !
0 votes
J'ai essayé toutes ces solutions, même celles des autres réponses. rien ne marche pour moi. ça se construit dans visual studio, mais jenkins qui utilise msbuild v19, obtient cette erreur. dois-je mettre à jour msbuild ? J'ai mis à jour mon application vers net framework 4.7.2 dans l'espoir de résoudre ce problème, mais c'est toujours la même chose. des idées ?