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), j'ai commencé à recevoir l'erreur suivante pendant 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 à l'assembly 'netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51'.
Dans ma vision principale Index.cshtml
, dans une ligne où j'utilise@Html.ActionLink
J'ai .NET Core SDK 2.0 et .NET Framework 4.7.1 installés sur ma machine mais je ne souhaite pas y inclure de 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, aucun NET 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
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é aux packages NuGet en cours de mise à niveau. Semble être quelque chose sur ma machine de développement locale.
Si vous publiez l'application dans un répertoire et l'exécutez avec IIS, cela fonctionne.
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>
Lors de la publication de l'application à l'aide de VS2017 sur le système de fichiers, je reçois l'avertissement suivant dans la sortie:
L'assembly suivant a des dépendances sur une version du .NET Framework qui est supérieure à la cible et peut ne pas se charger correctement pendant l'exécution, provoquant un échec: netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51. Les dépendances sont: System.Transactions, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089. Vous devez soit vous assurer que l'assembly dépendant est correct pour l'infrastructure cible, soit vous assurer que l'infrastructure cible que vous adressez est celle de l'assembly dépendant.
Mais je ne trouve rien sur System.Transactions
. Comment puis-je rechercher ce qui le référence?
System.Data.SQLite.Core
package est basé sur .NET Core (ou .NET Standard, je n'ai pas cherché la source ou les documents). Regardez le message d'erreur à la toute fin de votre fichier projet.packages\System.Data.SQLite.Core.1.0.108.0\lib
répertoire et il contient un dossier pour chaque version du .NET Framework, y compris 4.6 qui est ce que j'utilise. Je ne pense pas que ce soit le problème ici.Réponses:
Je pense que la solution pourrait être ce problème sur GitHub :
Je sais que vous utilisez 4.6.1 mais le choix de .NET 4.7.1 est important car les anciennes versions du Framework ne sont pas entièrement 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 packages NUGET et la rupture de références. L'autre changement à prendre en compte est la mise à niveau vers PackageReferences au lieu de
package.config
fichiers.Consultez ce guide et vous voudrez peut-être également un outil pour aider à la mise à niveau . Il nécessite cependant une version tardive de VS 15.7.
la source
<add assembly="netstandard
il manquait et que httpRuntime n'était pas 4.7.1 - C'est la réponse! Merci !!Éditer manuellement le fichier .csproj et ajouter la référence ci-dessous a fonctionné pour moi.
Merci à Fahad Alshaya qui l'a suggéré ici .
la source
J'ai dû faire une combinaison des réponses d'autres personnes sur ce fil.
<Reference Include="netstandard" />
la source
J'ai déjà rencontré ce problème 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 fonctionnant sur le framework complet, j'ai constaté que vous devez inclure un fichier global.json à la racine de votre projet et le pointer vers le SDK que vous souhaitez utiliser pour ce projet:
la source
La suppression des dossiers Bin et Obj a fonctionné pour moi.
la source
Après la mise à niveau du framework 4.6.1 vers 4.7.2, nous avons commencé à obtenir cette erreur:
"Le type 'System.Object' est défini dans un assembly qui n'est pas référencé. Vous devez ajouter une référence à l'assembly 'netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51'." et finalement la solution était d'ajouter la référence d'assemblage "netstandard" mentionnée ci-dessus:
la source
<Reference Include="netstandard" />
au fichier csproj, MAIS ... cela ne fonctionne que si vous définissez AUSSI CopyLocal sur true. Rien de tout cela n'a de sens.Bien que ce soit un ancien thread, j'ai eu le même problème aujourd'hui, la semaine dernière, j'ai mis à jour certains packages NuGet et bien que le site Web MVC fonctionnait bien sur ma machine de développement lorsque j'ai publié sur le serveur de test, il a échoué.
J'ai lu de nombreux articles mais aucun n'a fonctionné. J'ai finalement comparé les DLL de ma corbeille locale à celles du serveur de test et j'ai constaté que netstandard.dll n'était pas téléchargé, une fois téléchargé, le site Web fonctionnait correctement, je ne sais pas pourquoi VS2017 Web deploy n'a pas publié la DLL.
Juste quelque chose à surveiller au cas où rien de ce qui précède ne fonctionne pour vous.
la source
J'ai vécu cela lors de la mise à niveau de .NET Core 1.1 vers 2.1.
J'ai suivi les instructions décrites ici .
Essayez de supprimer
<RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion>
ou<NetStandardImplicitPackageVersion>
section dans le .csproj.la source
Nous avons commencé à obtenir cette erreur sur le serveur de production après le déploiement de l'application migrée de 4.6.1 vers 4.7.2.
Nous avons remarqué que le .NET Framework 4.7.2 n'y était pas installé. Afin de résoudre ce problème, nous avons suivi les étapes suivantes:
Installé le .NET Framework 4.7.2 à partir de:
https://support.microsoft.com/en-us/help/4054530/microsoft-net-framework-4-7-2-offline-installer-for-windows
Redémarré la machine
Confirmation de la version .NET Framework à l'aide de Comment trouver la version .NET?
La réexécution de l'application avec la version .Net Framework 4.7.2 installée sur la machine a résolu le problème.
la source
Je suis confronté au même problème que je fais en suivant la configuration immédiate de l'application fonctionne correctement
1-
2- Ajouter une référence
3-
Copy Above Path Dll to Application Bin Folder on web server
la source
Pourrait avoir à faire avec l'un de ceux-ci:
la source
entrez la description de l'image ici Définissez Copy Enbale sur true dans les propriétés netstandard.dll.
Ouvrez l'Explorateur de solutions et faites un clic droit sur netstandard.dll. Définissez Copy Local sur true.
la source
J'étais confronté à ce problème en essayant d'ajouter une dépendance .NETStandard à une bibliothèque .NET4.6.1 et de la compiler sous Linux avec Mono 4.6.2 (la version fournie avec Ubuntu 16.04).
Je l'ai finalement résolu aujourd'hui; la solution nécessite de faire ces deux choses:
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
par<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
dans le fichier .csproj.la source
Vous pouvez ajouter à votre web.config dans votre projet.
Cela ne fonctionnerait pas lorsque vous l'ajoutiez aux projets web.config car cela fonctionne avec MVC.
la source
Dans mon cas, j'ai découvert que le nuget problématique était System.Memory dans la version 4.5.1. une fois mis à jour vers la version 4.5.3, cela fonctionne !!
la source
Ceux qui n'ont pas de fichier web.config. Type de sortie autre que l'application Web. mettre à jour le fichier de projet (.csproj) avec le code ci-dessous.
Cela peut être dû à l'ajout / suppression du .netframework de manière incorrecte ou il peut se briser de manière inattendue.
Le type de sortie
la source
Ce problème est basé sur votre version installée de Visual Studio et de Windows, vous pouvez suivre les étapes suivantes: -
a rétrogradé votre PCL par la commande suivante
la source