Le projet est une application Web ASP.NET MVC ciblant le .NET Framework 4.6.1.
Tout à coup (certains packages NuGet ont été mis à niveau), l'erreur suivante a commencé à apparaître lors de l'exécution:
CS0012: Le type 'System.Object' est défini dans un assembly qui n'est pas référencé. Vous devez ajouter une référence à la norme Internet de l'Assemblée, Version = 2.0.0.0, Culture = neutre, PublicKeyToken = cc7b13ffcd2ddd51 '.
Dans ma vue principale Index.cshtml
, dans une ligne où je me sers de @Html.ActionLink
Le Kit de développement .NET Core SDK 2.0 et .NET Framework 4.7.1 est installé sur ma machine, mais je ne souhaite pas y inclure de référence. Il s’agit uniquement d’une application Web .NET Framework hébergée sur Windows IIS, où l’infrastructure installée est 4.6.1. Aucun noyau Core n'est installé sur le serveur.
Alors pourquoi demande-t-il d'ajouter une référence à netstandard
? Comment puis-je résoudre ce problème sans faire référence à netstandard
mais à l'intégralité 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. Donc, cela n’est pas lié aux paquets NuGet en cours de mise à jour. Semble être quelque chose sur ma machine de développement locale.
Si un publie l'application dans un répertoire et l'exécute avec IIS, cela fonctionne.
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>
Lors de la publication de l'application à l'aide de VS2017 sur le système de fichiers, l'avertissement suivant apparaît dans la sortie:
L'assembly suivant a des dépendances sur une version du .NET Structure supérieure à la cible et susceptible de ne pas se charger correctement lors de l'exécution provoquant une panne: 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 le l’assemblée dépendante est correcte pour le cadre cible ou assurez-vous que le cadre cible auquel vous vous adressez est celui de la personne à charge Assemblée.
Mais je ne trouve rien sur System.Transactions
. Comment puis-je rechercher ce qui le référence?
Je pense que la solution pourrait être ce numéro sur GitHub :
Essayez d’ajouter une référence netstandard dans web.config comme ceci: "
<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" />
Je me rends compte que vous utilisez la version 4.6.1, mais le choix de .NET 4.7.1 est important car les anciennes versions de Framework ne sont pas totalement compatibles avec .NET Standard 2.0.
Je le sais par expérience douloureuse, lorsque j’ai introduit les bibliothèques .NET Standard, j’ai eu beaucoup de problèmes avec les paquets et les références NUGET. L'autre modification à prendre en compte est la mise à niveau vers PackageReferences au lieu de fichiers package.config
.
Voir ce guide et vous voudrez peut-être aussi un outil pour aider à la mise à niveau . Il nécessite cependant une version tardive de VS 15.7.
Je me suis déjà heurté à cela auparavant et essayer un certain nombre de choses a résolu le problème pour moi:
De plus, s’il s’agit d’une application principale .net exécutée sur le cadre complet, j’ai constaté qu’il fallait inclure un fichier global.json à la racine de votre projet et le diriger vers le SDK que vous souhaitez utiliser. ce projet:
{
"sdk": {
"version": "1.0.0-preview2-003121"
}
}
Pourrait avoir à faire avec l'un de ces: