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' está definido 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 a ellos. Esta es solo una aplicación web de .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 sino al 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 al destino y es posible que no se cargue correctamente durante el tiempo de ejecución y provoque 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 ensamblaje dependiente sea correcto para el marco de destino o asegurarse de que el marco de destino al que se dirige sea el del ensamblaje dependiente.
Pero no puedo encontrar nada en System.Transactions . ¿Cómo puedo buscar lo que hace referencia?
Estaba enfrentando este problema al intentar agregar una dependencia de .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.Puede agregar a su web.config en su proyecto.
No funcionaría cuando lo agregue a proyectos web.config porque funciona con MVC.
Aquellos que no tienen el archivo web.config. Tipo de salida que no sea aplicación web. actualice el archivo del proyecto (.csproj) con el siguiente código.
Puede deberse a que se agregó o eliminó .netframework de manera incorrecta o puede que se rompa de manera inesperada.
<ItemGroup> <Reference Include="netstandard" /> </ItemGroup>Tipo de salida
Después de actualizar del marco 4.6.1 a 4.7.2, comenzamos a recibir este error:
"El tipo 'System.Object' está definido 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, en última instancia, la solución fue agregar la referencia de ensamblaje "netstandard" mencionada anteriormente:
<compilation debug="true" targetFramework="4.7.1" > <assemblies> <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51"/> </assemblies> </compilation>La solución de Quango está funcionando, pero prefiero resolverla agregando este código en mi Web.config como nuevos proyectos:
<system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/> </compilers> </system.codedom>Aquí es donde existe netstandard.dll: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\netstandard.dll Agregue referencia a su proyecto a través de esto.
En mi caso, actualicé mi VS 2019 a la última versión a partir del 21/05, pero sigo teniendo el mismo problema.
lo resolvi por
The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'system.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a<ItemGroup> agregue una nueva etiqueta <Reference> como se muestra a continuación<Reference Include="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />Tengo el mismo problema con un proyecto net5.0 , que incluye una tarea de compilación escrita con netstandard2.0
<Project> <Target Name="RestoreBuildTasks"> <MSBuild Projects="../../../BuildTasks/BuildTasks.csproj" Targets="Restore" Properties="Configuration=Release"/> </Target> <Target Name="BuildBuildTasks"> <MSBuild Projects="../../../BuildTasks/BuildTasks.csproj" Targets="Build" Properties="Configuration=Release"/> </Target> <UsingTask TaskName="Brick.Build.NugetTask" AssemblyFile="AGXBrick/BuildTasks/bin/$(Platform)/Release/netstandard2.0/BuildTasks.dll"/> <Target Name="CheckNuGetSources" BeforeTargets="Restore" DependsOnTargets="RestoreBuildTasks;BuildBuildTasks"> <NuGetTask /> </Target> </Project> Donde BuildTasks.csproj se ve así
<PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> Pude resolver esto estableciendo explícitamente TargetFramework=netstandard2.0 en la tarea de MSBuild :
<MSBuild Projects="../../../BuildTasks/BuildTasks.csproj" Targets="Restore" Properties="Configuration=Release;TargetFramework=netstandard2.0"/>Tengo el mismo problema, mi proyecto usa .net framework 4.6.1, y cuando uso el último MSBuild (16.10.2) para crear una solución, aparece un mensaje de error, por ejemplo, ValueType... debe hacer referencia a netstandard 2.0... .
Lo descubrí instalando el elemento SDK de .Net, cuando selecciona este elemento, el tiempo de ejecución de .NET 5.0 y el tiempo de ejecución de .NET 3.1 también se instalarán.
Después de instalar este elemento, puedo compilar mi proyecto con el último MSBuild y ¡sin errores!
Empezamos 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.
Nos dimos cuenta de que .NET framework 4.7.2 no estaba instalado allí. Para solucionar este problema hicimos los siguientes pasos:
Instalado el .NET Framework 4.7.2 desde:
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.
Tuve que hacer una combinación de las respuestas de otras personas en este hilo.
<Reference Include="netstandard" />
Establezca Copy 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.
Estoy enfrentando el mismo problema que hago después de que la aplicación Configurar ahora funcione bien
1-
<compilation debug="true" targetFramework="4.7.1"> <assemblies> <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51"/> </assemblies> </compilation>2- Agregar referencia
**C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\ADL Tools\2.4.0000.0\ASALocalRun\netstandard.dll**3-
Copy Above Path Dll to Application Bin Folder on web server
Podría tener que ver con uno de estos:
Me he encontrado con esto antes y probar varias cosas me lo ha solucionado:
Además, si se trata de una aplicación .net core que se ejecuta en el marco completo, descubrí que debe incluir un archivo global.json en la raíz de su proyecto y apuntarlo al SDK que desea usar para ese proyecto:
{ "sdk": { "version": "1.0.0-preview2-003121" } }Creo que la solución podría ser este problema en GitHub :
Intente agregar una referencia de netstandard en web.config de esta manera:"
<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" />
Me doy cuenta de que está usando 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.
Sé esto por experiencia dolorosa, cuando introduje las bibliotecas .NET Standard, tuve muchos problemas con los paquetes NUGET y la ruptura de referencias. El otro cambio que debe tener en cuenta es la actualización a PackageReferences en lugar de los archivos package.config .
Consulte esta guía y es posible que también desee una herramienta que le ayude con la actualización . Sin embargo, requiere una versión posterior de VS 15.7.
Este problema se basa en su versión instalada de Visual Studio y Windows, puede seguir los siguientes pasos:-
rebajó su PCL con el siguiente comando
Install-Package Xamarin.Forms -Version 2.5.1.527436Aunque este es un hilo antiguo, tuve el mismo problema hoy, la semana pasada actualicé algunos paquetes de NuGet y aunque el sitio web de 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 que se cargó, el sitio web funcionó bien, no estoy seguro de por qué la implementación web de VS2017 no publicó la DLL.
Solo algo a tener en cuenta en caso de que nada de lo anterior funcione para usted.
Eliminar las carpetas Bin y Obj funcionó para mí.