visual tutorial studio net mvc for asp asp.net .net asp.net-mvc-4

asp.net - tutorial - ¿Qué hace el elemento web.config compilation/assemblies?



mvc 4 visual studio 2015 download (4)

Tuve un problema donde, trabajando en un nuevo proyecto MVC, tan pronto como agregué Html.Partial("Name") a mi página _Layout.cshtml , ASP.NET _Layout.cshtml esta excepción en la carga de la página:

error CS0012: se define el tipo ''System.Object'' que no está en un conjunto referenciado. Agregue una referencia al ensamblado "System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a".

La solución es agregar esto al web.config , elemento de compilación:

<assemblies> <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </assemblies>

Me encantaría saber por qué esto soluciona el problema.

Lo extraño es que la nueva aplicación MVC que estoy usando tiene una carga de páginas ASPX de WebForms que funcionan bien. He copiado un montón de cosas heredadas de WebForms en este nuevo proyecto MVC, acres de código, y todo funciona, y sin la llamada Html.Partial , incluso mi vista MVC representa.

Entonces, ¿qué sucede en la Tierra? ¿Qué hace esta configuración y por qué no son suficientes las referencias normales del proyecto y la configuración del marco de destino?


Encontré exactamente el mismo error después de cambiar a VS 2017 y C # 7.1 y agregar referencias a System.ValueTuple en mi proyecto .NET 4.6 ASP.NET

Problema resuelto activando a Roslyn en proyectos ASP.NET sin alterar las referencias en web.config

El beneficio adicional de esto es que puedes usar nuevas características C # en páginas aspx y vistas MVC


Esto se debe a una desconexión y limitación entre el tiempo de compilación y los entornos de tiempo de ejecución de un proyecto ASP.NET/MVC . La mayoría de los códigos en un proyecto web se compilan en tiempo de compilación (es decir, F5) con excepción de las vistas (tanto Razor como el código ASPX en línea) que se crean dinámicamente en tiempo de ejecución (es decir, dentro de IIS).

En su mayor parte, intentamos hacer que estos dos entornos sean exactamente iguales y, por lo general, no notará ninguna diferencia. Desafortunadamente. te has encontrado con uno de esos casos en los que existe una diferencia y has necesitado agregar manualmente una referencia para hacer que el tiempo de ejecución sea imitación del tiempo de compilación.

Lo que está sucediendo es que es probable que tengas una dependencia de una biblioteca portátil (supongo, Microsoft.Net.Http ). Las bibliotecas portátiles son un poco diferentes a las bibliotecas normales, y necesitamos referencias adicionales para hacer feliz al compilador. En tiempo de compilación, detectamos una dependencia en una biblioteca portátil y agregamos automáticamente todas las referencias a C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.5/Facades . Lamentablemente, el tiempo de ejecución no hace esto y debe agregar manualmente estas referencias hasta que solucionemos esto en una versión futura.

Para referencia futura, puede simplemente tomar la siguiente sección y pegar esto directamente en Web.Config (esto representa la instantánea para 4.5):

<compilation> <assemblies> <add assembly="System.Collections, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Collections.Concurrent, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.ComponentModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.ComponentModel.Annotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.ComponentModel.EventBasedAsync, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Diagnostics.Contracts, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Diagnostics.Debug, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Diagnostics.Tools, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Diagnostics.Tracing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Dynamic.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Globalization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.IO, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Linq.Expressions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Linq.Parallel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Linq.Queryable, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Net.NetworkInformation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Net.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Net.Requests, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.ObjectModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Reflection, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Reflection.Emit, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Reflection.Emit.ILGeneration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Reflection.Emit.Lightweight, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Reflection.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Reflection.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Resources.ResourceManager, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Runtime.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Runtime.InteropServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Runtime.InteropServices.WindowsRuntime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Runtime.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Runtime.Serialization.Json, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Runtime.Serialization.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Runtime.Serialization.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Security.Principal, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.ServiceModel.Duplex, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.ServiceModel.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.ServiceModel.NetTcp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.ServiceModel.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.ServiceModel.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Text.Encoding, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Text.Encoding.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Text.RegularExpressions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Threading, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Threading.Tasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Threading.Tasks.Parallel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Xml.ReaderWriter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Xml.XDocument, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add assembly="System.Xml.XmlSerializer, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </assemblies> </compilation>


Me encontré con una situación similar. Tuve un proyecto de MVC con Unity. El proyecto tenía como objetivo .Net versión 4.5.1 pero a mi máquina de creación le faltaba la carpeta 4.5.1 en la carpeta C: / Archivos de programa (x86) / Reference Assemblies / Microsoft / Framework.NETFramework.

Entonces, lo que resolvió mi problema fue copiar la carpeta v4.5.1 de mi máquina de desarrollo a la máquina de compilación.

Puede encontrar el enlace a la respuesta original here


Visual Studio 2017 MVC.RAZOR se solucionó al agregar esto a la sección web.config de la aplicación web: aquí hay un fragmento de mi Web.Config justo después del nodo system.web:

<system.web> <authentication mode="None" /> <compilation debug="true" targetFramework="4.5.1"> <assemblies> <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </assemblies> </compilation> <httpRuntime targetFramework="4.5.1" />