El proyecto es una aplicación web ASP.NET MVC dirigida a .NET Framework 4.6.1.
De repente (se actualizaron algunos paquetes de NuGet) comencé a recibir el siguiente error durante el tiempo de ejecución:
CS0012: El tipo 'System.Object' se define en un ensamblado al que no se hace referencia. Debe agregar una referencia al ensamblado 'netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51'.
En mi vista principal Index.cshtml
, en una línea donde hago uso de@Html.ActionLink
Tengo .NET Core SDK 2.0 y .NET Framework 4.7.1 instalados en mi máquina, pero no quiero incluir una referencia. Esta es solo una aplicación web .NET Framework, está alojada en Windows IIS donde el marco instalado es 4.6.1, no hay NET Core instalado en el servidor.
Entonces, ¿por qué pide agregar una referencia a netstandard
? ¿Cómo puedo solucionarlo sin hacer referencia netstandard
a Windows .NET Framework 4.6.1 completo?
Revisé una confirmación anterior que funcionó bien y todavía recibo este error. Por lo tanto, no está relacionado con la actualización de los paquetes NuGet. Parece ser algo en mi máquina de desarrollo local.
Si publica la aplicación en un directorio y la ejecuta con IIS, funciona.
paquetes.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>
Al publicar la aplicación usando VS2017 en el sistema de archivos, aparece la siguiente advertencia en el resultado:
El siguiente ensamblado tiene dependencias en una versión de .NET Framework que es superior a la de destino y puede que no se cargue correctamente durante el tiempo de ejecución, lo que provoca un error: netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51. Las dependencias son: System.Transactions, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089. Debe asegurarse de que el ensamblado dependiente sea correcto para el marco de destino o asegurarse de que el marco de destino al que se dirige sea el del ensamblado dependiente.
Pero no puedo encontrar nada en System.Transactions
. ¿Cómo puedo buscar qué lo hace referencia?
System.Data.SQLite.Core
paquete se basa en .NET Core (o .NET Standard, no busqué la fuente ni los documentos). Mire el mensaje de error al final de su archivo de proyecto.packages\System.Data.SQLite.Core.1.0.108.0\lib
directorio y contiene una carpeta para cada versión de .NET Framework, incluida la 4.6, que es lo que estoy usando. No creo que ese sea el problema aquí.Respuestas:
Creo que la solución podría ser este problema en GitHub :
Me doy cuenta de que está utilizando 4.6.1, pero la elección de .NET 4.7.1 es importante ya que las versiones anteriores de Framework no son totalmente compatibles con .NET Standard 2.0.
Lo sé por una experiencia dolorosa, cuando presenté las bibliotecas .NET Standard tuve muchos problemas con los paquetes NUGET y la ruptura de referencias. El otro cambio que debe considerar es actualizar a PackageReferences en lugar de
package.config
archivos.Consulte esta guía y es posible que también desee una herramienta para ayudar con la actualización . Sin embargo, requiere una versión VS 15.7 tardía.
fuente
<add assembly="netstandard
faltaba y también httpRuntime no era 4.7.1- ¡Esta es la respuesta! Gracias !!Editar manualmente el archivo .csproj y agregar la referencia a continuación funcionó para mí.
Gracias a Fahad Alshaya que lo sugirió aquí .
fuente
Tuve que hacer una combinación de las respuestas de otras personas en este hilo.
<Reference Include="netstandard" />
fuente
Me he encontrado con esto antes y probar varias cosas me ha solucionado:
Además, si se trata de una aplicación principal .net que se ejecuta en el marco completo, he descubierto que debe incluir un archivo global.json en la raíz de su proyecto y apuntarlo al SDK que desea usar para ese proyecto:
fuente
Eliminar las carpetas Bin y Obj funcionó para mí.
fuente
Después de actualizar del marco 4.6.1 a 4.7.2, comenzamos a recibir este error:
"El tipo 'System.Object' se define en un ensamblado al que no se hace referencia. Debe agregar una referencia al ensamblado 'netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51'." y finalmente la solución fue agregar la referencia de ensamblaje "netstandard" mencionada anteriormente:
fuente
<Reference Include="netstandard" />
al archivo csproj, PERO ... eso solo funciona si TAMBIÉN configura CopyLocal en verdadero. Nada de esto tiene sentido.Aunque este es un hilo antiguo, tuve el mismo problema hoy, la semana pasada actualicé algunos paquetes de NuGet y, aunque el sitio web MVC funcionó bien en mi máquina de desarrollo cuando publiqué en el servidor de prueba, falló.
Leí numerosas publicaciones pero ninguna funcionó. Finalmente comparé las DLL en mi contenedor local con las del servidor de prueba y descubrí que netstandard.dll no se cargó, una vez cargado, el sitio web funcionó bien, no estoy seguro de por qué la implementación web VS2017 no publicó la DLL.
Solo algo a tener en cuenta en caso de que nada de lo anterior funcione para usted.
fuente
Experimenté esto al actualizar .NET Core 1.1 a 2.1.
Seguí las instrucciones descritas aquí .
Intente eliminar la sección
<RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion>
o<NetStandardImplicitPackageVersion>
en .csproj.fuente
Comenzamos a recibir este error en el servidor de producción después de implementar la aplicación migrada de 4.6.1 a 4.7.2.
Notamos que .NET framework 4.7.2 no estaba instalado allí. Para solucionar este problema, hicimos los siguientes pasos:
Instaló .NET Framework 4.7.2 desde:
https://support.microsoft.com/en-us/help/4054530/microsoft-net-framework-4-7-2-offline-installer-for-windows
Reinició la máquina
Confirmó la versión de .NET Framework con la ayuda de ¿Cómo encuentro la versión de .NET?
Ejecutar la aplicación nuevamente con la versión .Net Framework 4.7.2 instalada en la máquina solucionó el problema.
fuente
Estoy enfrentando el mismo problema que hago siguiendo la aplicación Setup Now Funciona bien
1-
2- Agregar referencia
3-
Copy Above Path Dll to Application Bin Folder on web server
fuente
Podría tener que ver con uno de estos:
fuente
ingrese la descripción de la imagen aquí Configure Copiar Enbale en verdadero en las propiedades de netstandard.dll.
Abra el Explorador de soluciones y haga clic derecho en netstandard.dll. Establezca Copiar local en verdadero.
fuente
Me enfrentaba a este problema al intentar agregar una dependencia .NETStandard a una biblioteca .NET4.6.1 y compilarla en Linux con Mono 4.6.2 (la versión que viene con Ubuntu 16.04).
Finalmente lo resolví hoy; la solución requiere hacer ambas cosas:
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
a<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
en el archivo .csproj.fuente
Puede agregar a su web.config en su proyecto.
No funcionaría cuando lo agregas a proyectos web.config porque funciona con MVC.
fuente
En mi caso, descubrí que el nuget problemático era System.Memory en la versión 4.5.1. cuando se actualiza a la versión 4.5.3 funciona !!
fuente
Aquellos que no tienen el archivo web.config. Tipo de salida diferente a la aplicación web. actualice el archivo del proyecto (.csproj) con el código de abajo.
Puede deberse a agregar / eliminar el .netframework de manera incorrecta o puede romperse de manera inesperada.
Tipo de salida
fuente
Este problema se basa en su versión instalada de Visual Studio y Windows, puede seguir los siguientes pasos: -
degradó su PCL con el siguiente comando
fuente